در باره eventDispatcher

sabersoft

Active Member
سلام
دوستان ممکنه یه توضیح با مثال ساده در مورد eventDispatcher در as3 بدهید تو فهمش کمی گیر دارم
ممنون
 

benyamin_pc

Well-Known Member
این یه جورایی کار اینو میکنه که نمیشه رو هر موی کلیپی مثل اکشن2 کد نوشت و اونو هی کپی کرد تا چنتا موی با کد مشابه سریع ایجاد شه اما کارایش خیلی فراتره
یکی از کارایی که میتونین باهاش کنین اینه که یه event رو براي چنتا موی کلیپ انتشار بدین به شکل زیر
movie_clip.addEventListener(yek event,tabe);
function tabe(e:event):void{if(e.target.name=="a){trace("a")}}
براي هرچنتا بخاین میشه تست کردو برا همشون از همین کد استفاده کرد
 

DaDaDooDoo

کاربر VIP
کلاس eventDispatcher برای ساختن یک custom Event هست ، وقتی کاربرد داره که شما بخواهید یک رویداد سفارشی بسازید . به عنوان مثال وقتی تایمر به ثانیه 10 رسید یک رویداد دیسپچ (dispatch)بشه و به یک آبجکت هم Listener همین event رو ابلاغ می کنید .
رویداد های فلش ( مثل رویداد های ماوس ) از همین کلاس extend شدن .
 

sabersoft

Active Member
کلاس eventdispatcher برای ساختن یک custom event هست ، وقتی کاربرد داره که شما بخواهید یک رویداد سفارشی بسازید . به عنوان مثال وقتی تایمر به ثانیه 10 رسید یک رویداد دیسپچ (dispatch)بشه و به یک آبجکت هم listener همین event رو ابلاغ می کنید .
رویداد های فلش ( مثل رویداد های ماوس ) از همین کلاس extend شدن .
ممنون
فکر کنم منظورم را خوب بیان نکردم می خواستم بگم روال اجرایی این کار چطور است اگه ممکنه با یه مثال راهنمایی کنید.همین مثالی که فرمودید در مورد تایمر خوب میشه داخل خود تایمر کاری کرد که بعد از ثانیه 10 کار خاصی را انجام بده و نیازی به تعریف رویداد نیست
 

DaDaDooDoo

کاربر VIP
همونطور که می دونید یک آبجکت ( نمونه ای از یک کلاس ) در ساختار برنامه نویسی شیء گرا دارای property , event & method هست . متدها که در واقع همون توابع ما هستند و پروپرتی ها هم می تونند یکسری متغیر private در داخل کلاس اصلی باشند ، اما وقتی شما می خواهید برای کلاس خود event تعریف کنید باید از eventDispatcher استفاده کنید .
به مثال زیر دقت کن : ( سعی کردم به ساده ترین شکل ممکن بنویسم )

یک کلاس داریم به نام eventDispatcherTest که کدها زیر رو توش نوشتیم :
PHP:
package 
{
	import flash.display.MovieClip
	import flash.events.*;
	public class eventDispatcherTest extends MovieClip
	{
		public function eventDispatcherTest()
		{
			trace ("constructor Made !");
		}
		public function SomeMethod()
		{
			dispatchEvent(new Event("OnMethodRun"));
		}
	}
}

حالا توی یک فایل فلش و توی فریم اول این کدها رو نوشتیم :
PHP:
import flash.events.Event;

var boject:eventDispatcherTest = new eventDispatcherTest();
boject.addEventListener("OnMethodRun", test);

function test(e:Event)
{
	trace("Custom Event Run");
}

boject.SomeMethod();

در کلاس eventDispatcherTest یک رویداد تعریف کردم به اسم OnMethodRun زمانی که متد SomeMethod فراخوانی می شه ، دیسپچ می شه .
بعد در اون فایل فلش یک آبجکت از کلاس eventDispatcherTest گرفتم و متد SomeMethod رو فراخوانی کردم و همونطور که خواهید دید تابع test فراخوانی می شه و عبارت Custom Event Run نمایش داده می شه .
مثال پیوست شده .
موفق باشید .
 

پیوست ها

  • eventDispatcher.rar
    7.2 کیلوبایت · بازدیدها: 6

Member
کاملا واضح و کامل بود
فکر کنم بیشتر در موارد بسیار خاصی از اونت دیسپچر استفاده میشه و این موارد خاص در کلاس های پیچیده ای مثل فیزیک یا کلیژن اتفاق می افته چون کلاس های کوچیکتر مقدار رو میگیرن و عمل میکنن و نیازی به ساختن اونت ها ندارن
 

++Hadi++

Active Member
از کوروش ممنونم
ببینید اگه قرار باشه یه کلاس بنویسید که بتونین مثلا توش از دستور addEventListener استفاده کنین ، باید اونو پویا تر و زنده تر کنین و برا این کار بهتره اونو زیر کلاس eventDispatcher قرار بدین .وپرنه اگه مثلا اونو زیر کلاس MovieClip کنین تا به این امر بپردازین ، باز امکان پدیر می شه ولی اشکالش تو ایه که کلاستون سنگین تر می شه و مثل این می مونه که بخواهین یه ماشین حساب داشته باشین ولی برید و یه کامپیوتر بخرید . و البته موارد استفاده دیگه ای داره که من خیلی باهاشون کار نکردم .
 

triton

کاربر فعال
استفاده از eventDispatcher رابطه نزدیکی با مفهوم شی گرایی داره .هدف اصلی استفاده از این متد ، بدست آوردن راحتتر اطلاعات ( مشخصات و متدها) از یک شی است .در این روش یک رویداد را در شی مورد نظر پر از اطلاعات کرده و سپس پرتاب می کنیم(dispatch) و با یک شنودگر اون را به سادگی دریافت می کنیم و از اطلاعات درون اون که update هم هست استفاده می کنیم.
 

++Hadi++

Active Member
فردا انشاءال... یه سمپل کامل در این مورد می زارم .یکی از موارد استفاده این کلاس رو پیدا کردم که خیلی به دردم خورد .
 

sabersoft

Active Member
فردا انشاءال... یه سمپل کامل در این مورد می زارم .یکی از موارد استفاده این کلاس رو پیدا کردم که خیلی به دردم خورد .
ممنونم
من هم دنبال یه مثال کاربردی می گردم مثالهایی را که تا بهحال دیدم یا خیلی پیچیده بودن یا خیلی ساده که اصلا نیاز به استفاده از eventDispatcher نبوده و براحتی قابل انجام هستند
 

جدیدترین ارسال ها

بالا