بررسی شئ Timer در ActionScript 3

یکی از مشکلات مهم و قابل توجه‌ای که در اکشن اسکریپت 2، موجب بروز سختیهایی در طراحی کلیپ‌ها می‌شد، عدم وجود یک Timer مستقل و انعطاف‌پذیر و نیاز به استفاده از Interval ها بود.

این مشکل با ارائه کلاس مستقل تایمر (flash.util.Timer) در FlashPlayer 9 و با استفاده از AS3 حل شده است. با استفاده از این کلاس به سادگی می‌توان زمان اجرای دستورات را زمانبندی نمود. منظور از زمانبندی این است که می‌‌توان تعداد دفعات اجرا، بازه زمانی بین دفعات، زمان شروع و غیره را به سادگی مشخص کرد.

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

به عنوان مثال:

import flash.utils.Timer;
import flash.events.TimerEvent;

var t:Timer = new Timer(2000,20);
t.start();

t.addEventListener(TimerEvent.TIMER,timTrig);
t.addEventListener(TimerEvent.TIMER_COMPLETE,timComp);

function timTrig(e:TimerEvent) {
trace("Trigger");
}

function timComp(e:TimerEvent) {
trace("Finish");
}

رویدادهای موجود برای این شئ، timer و timerComplete هستند که از اولی برای اجرای دستورات زمانبندی شده استفاده شده و دومی نیز در پایان اجرای تعداد دفعات مشخص شده، فعال خواهد شد.

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

یکی از موارد مورد علاقه من برای استفاده از شئ تایمر، نمایش جلوه‌ها و افکتها به صورت تصادفی است. برای انجام این کار، کافی است مقدار delay تایمر را در زمان اجرای آن به مقداری تصادفی در بازه مورد نیاز تغییر دهید.
به عنوان مثال، اگر MyEff_mc یک Movieclip حاوی جلو مورد نظر و واقع بر روی Timeline اصلی باشد، برای اجرای تصادفی آن به صورت زیر عمل می‌شود:

import flash.utils.Timer;
import flash.events.TimerEvent;

var t:Timer = new Timer(5000,20);
t.start();

t.addEventListener(TimerEvent.TIMER,timTrig);
t.addEventListener(TimerEvent.TIMER_COMPLETE,timComp);

function timTrig(e:TimerEvent) {
trace("Delay:",e.currentTarget.delay);
    e.currentTarget.delay = Math.floor(2500 + Math.random() * 5000);
    Object(root).MyEff_mc.gotoAndPlay(1);
}

function timComp(e:TimerEvent) {
trace("Finish");
}

About محمد شمس

برنامه‌نویس، طراح انیمیشن و علاقمند به هوش مصنوعی

One Comment

  1. جالب بود ، موفق و پیروز باشید

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


2 × = 2