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

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

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

توسط کدی که در پایان مطلب قرار داده شده است می توانیم وقفه زمانی در پخش 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
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

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

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

12 نظر

  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 کاربرد ندارد.

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

      • سلام.
        راهنما و مرجعی کامل برای دستورات، توابع، متد ها و… آرگومانهای دقیق آنها در اکشن اسکریپت ۳معرفی می کنید که ترجیحا یک مثال ساده هم ذیل آنها معرفی کرده باشد؟

        • سلام و عرض ادب

          بهترین راهنما وب سایت ادوبی هست که هم توابع و کاربرد را توضیح داده و هم در مواردی مثال هایی را قرار داده است

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

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

    • سلام و عرض ادب

      برای انجام این کار شما می بایست از دو فایل فلش استفاده کنید که یکی پخش کننده و یکی کلیپ مورد نظر شما باشد. فایل پخش کننده باید به نوعی تنظیم شود که خصوصیات و پلیر آن همیشه قابل درسترس باشد این کار می تواند به صورت ساده انجام شود و یا در رویداد Resize برای نمایش در محل مناسب نسب به تغییر سایز اقداماتی انجام شود.

      در مورد پیمایش در طول کلیپ مورد مهم این هست که اطمینان حاصل کنید کلیپ صدایش به صورت Stream در فلش تنظیم شده باشد تا با حرکت فریم ها توسط اکشن صدا از فریم مربوطه شروع شود.
      حال با توجه به totalFrames و currentFrame مربوطه به شی لود شده می توانید برای نمایش یک نوار اقدام نمایید برای نمایش محل جاری نیز توسط تایمر یا EnterFrame می توانید اطلاعات را بررسی کرده و حرکت محل جاری را نمایش دهید.

      برای نمایش نوار و محل جاری می بایست نسب به عرض نوار و مقدار کل فریم ها و فریم جاری نسبت محل جاری روی نوار را بدست بیاورید که این مورد مانند پیمایش در حال ویدئو می باشد.

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

ارسال جواب

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

*

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