خانه » ادوبی فلش » ایجاد وقفه زمانی در تایم لاین-اکشن اسکریپت ۳

ایجاد وقفه زمانی در تایم لاین-اکشن اسکریپت ۳

این مطلب یکی از مجموعه آموزش های کوتاهی می باشد که از این به بعد مطالبی دیگر نیز با این سبک خواهیم داشت ، به صورت کوتاه به نکته ای کاربردی و مهم پرداخته می شود ، امیدوارم مورد توجه دوستداران فلش و اکشن اسکریپت قرار بگیرد.

توسط کدی که در پایان مطلب قرار داده شده است می توانیم وقفه زمانی در پخش Movie فلش در بخشی (فریمی) از تایم لاین (TimeLine) ایجاد کنیم.


این کد توسط تابع تعریف شده با نام wait بعد از فراخوانی در هر فریم از تایم لاین Movie حرکت را stop می کند (خط ۵) و بلافاصله با تعریف کلاس  Timer با توجه به مقداری که به عنوان آرگمان ورودی wait وارد شده است (خط ۶) (این آرگمان بر مبنای millisecond می باشد ، به این معنا که ۱۰۰۰ برابر ۱ ثانیه است) ، رویدادی ایجاد می کند (خط ۷) که بعد از اتمام زمان وارد شده تابع continuePlayhead را فراخوانی می کند ، که با اجرای فرمان play ادامه پخش Movie انجام می شود (خط ۱۳)، بعد در مرحله اول تایمر stop می شود (خط ۱۴)و بعد تایمر reset می شود (خط ۱۵) (این امر برای بدون مشکل بودن استفاده های بعدی می باشد) و رویدادی که تایمر ایجاد شده بود نیز در این مرحله حذف می گردد (خط ۱۶).

نکته : متغییر delayTimer که از نوع Timer می باشد در ابتدا و خارج از توابع تعریف شده است که دسترسی به آن در هر دو تابع وجود داشته باشد.

var delayTimer:Timer;

function wait(timeToHold:Number)
{
	stop();
	delayTimer = new Timer(timeToHold,0);
	delayTimer.addEventListener(TimerEvent.TIMER, continuePlayahead);
	delayTimer.start();
}

function continuePlayahead(e:Event):void
{
	play();
	delayTimer.stop();
	delayTimer.reset();
	delayTimer.removeEventListener(TimerEvent.TIMER, continuePlayahead);
}

به نظر شما این روش ، روش مناسبی برای ایجاد وقفه زمانی در تایم لاین می باشد؟
آیا روش دیگری برای این کار می شناسید؟

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

8 نظر

  1. سلام

    روش خوبی است، اما فکر میکنم گاهی دقت timer با توجه به سنگین بودن محتوای فلش در حال اجرا، تغییر میکند. در چنین مواقعی استفاده از رویدار enterFrame مطمئن تر و با محتوای فلش هماهنگ تر است.

    من معمولا در اسلایدشو از این روش شئ Timer استفاده میکنم.

    • سلام محمد شمس عزیز

      بله دقت Enter Frame در اجرا بیشتر می باشد ، بنده هم در مواردی که پروژه سنگین باشد ، سعی می کنم از EnterFrmae البته با دقت به gc استفاده کنم..

      سپاسگزارم
      موفق و پیروز باشید

  2. با عرض سلام و خسته نباشید
    می خواستم بدانم طریقه کار با موتور فیزیکی box2D که شبیه ساز حرکات واقعی دو بعدی با اکشن اسکریپت ۳ هست چه جوزیه؟مثلا دو شی به هم برخورد کنند و با توجه به سرعت و زاویه ای که دارند , پس از برخورد با زاویه و شتاب مناسب از هم دور می شوند.

    • سلام دوست گرامی
      در واقع box2D یک موتور تحلیلگر فیزک می باشد و شما اشیاء ، وزن ، جازیه و… را در آن تعیین می کنید.
      حال این موتور برخورد ها را با توجه به شتاب ، زاویه حرکت و دیگر شرایط اشاء موجود می سنجد و نتیجه را شما مشاهده می کنید
      کار با این کلاس نیاز به مطالعه راهنمای مستندات Documentation مریوطه به Box2D را دارد.
      به هر حال box2D یک کلاس هست و استفاده از آن نیاز به اطلاعاتی از نحوه کار با آن و نحوه نگارش و سبک سیاق کار ، که به سلیقه برنامه نویسان آن می باشد ، دارد.
      شما می توانید نمونه های بسیاری با جستجو box2D در گوگل بیاید و آنها را تست کنید.

      موفق و پیروز باشید.

  3. سلام بهروز جان!
    این همون تابع setTimeout()نیست ؟؟؟
    میتونی راحت همون کار رو انجام بدی

    • سلام جاوید عزیز
      خیر ، با توجه این که Timer یکی از توابع کاربردی در اکشن ۳ می باشد و این که برای ایجاد وقفه زمانی یکی از بهترین روش ها می باشد
      البته در هر صورت بهترین گزینه در اکشن ۳ برای کار با هر موردی که به زمان مربوطه می شود کلاس Timer می باشد
      و همان طور که می بینید دسترسی ها و امکانات مناسبی برای reset , stop و… را در اختیار شما قرار می دهد تا در نتیجه بتوانید مدیریت بهتری بر حافظه داشته باشید.
      (اصلاح شد)
      موفق و پیروز باشید.

  4. سلام ممنون
    ولی فکر کنم اشتبا گفتید اون که در بازه ی زمانی اجرا میکنه پشت هم setIntervalهستش! setTimeOutاز اسمش که معلومه تا اون زمانی رو که بهش میدیم تموم شه یه تابع رو صدا میزنه

    setTimeout(closure:Function,delay:Number);
    
    • درسته ، اشتباه شده است ، منظورم از اون تکرار همون SetInterval بود ، در مورد setTimeOut هم باز کلاس تایمر عملکرد بهتری در اکشن ۳ دارد و مدیریت کردن و hanel آن با رویدادهای TimerEvent بسیار بهتر و کاربردی تر از setTimeOut می باشد.
      امکانانات و متدهای مربوطه به کلاس Timer را می توانید در راهنمای اکشن اسکریپت ۳ مشاهده کنید
      البته setTimeOut در مواردی که نیاز به آن کم باشد و در پروژه هایی که حافظه زیاد درگیر نیست به نظرم می تواند انتخاب خوبی باشد. این بستگی دارد به نیاز شما در یک پروژه.

      در ضمن این منبع می تواند به تصمیم شما کمک بیشتری کند : http://stackoverflow.com/questions/2683398/timer-vs-settimeout

      و یک نکته دیگر هم هست ، فکر می کنم کلا” setTimeout در کلاس های External کاربرد ندارد.

      موفق و پیروز باشید.

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه