فقط در زبانهاي به اصطلاح MultiThread هست كه داخل بك حلقه ميشه عمليات گرافيكي انجام داد. علت اون هم اينه در اين زبانها ميشه يك thread را براي مدتي يا كلا متوقف كرد ولي در ActionScript كه يك زبان multithreaded نيست يك حلقه به طور كامل و در همان فريم اجرا مي شود سپس فريم بعدي. بنابراين در اينجا event model فلش هست كه به كار مي ايد:
براي مثال onEnterFrame يك event مختص MovieClip هاست كه بدون نياز به حركت از يك فريم به بعدي عملياتي را در فواصل زماني شبيه گذر 2 فريم انجام مي دهد:
فرض كنيم mc_ يك MovieClip در صفحه باشد:
کد:
_mc.onEnterFrame = function()
{
if(this._x < 200) this._x += 5;
else delete this.onEnterFrame;
};
در هر حال onEnterFrame كاملا وابسته به Frame Rate صفحه است و اگر FPS را زياد كنيد سرعت اجراي آن بيشتر خواهد شد. براي ايجاد انيميشن هاي مستقل از FPS مي توان از setInterval استفاده كرد.
تا اينجا جواب سوال شما، ولي فلش تابعي هم براي refresh كردن صفحه دارد اين تابع updateAfterEvent نام دارد و فقط در قلمرو Clip Event ها عمل مي كند.
مثلا event onMouseMove با هر حركت Mouse توسط فلش detect مي شود ولي صفحه نمايش در هر فريم update مي شود (حتي اگر انيميشني وجود نداشته باشد) بنابراين با استفاده از updateAfterEvent در قلمرو handler اين event مي توان صفحه را refresh كرد:
کد:
this.onMouseMove = function()
{
_mc._x = _xmouse;
_mc._y = _ymouse;
updateAfterEvent();
};
يك بار بدون updateAfterEvent و يك بار با آن اجرا كنيد تا متوجه تفاوت بشويد