رابطه بین فرزند و والد در اکشن اسکریپت3

sabersoft

Active Member
با سلام
صورت کلی کاری که می خوام انجام بدم اینه اما نمی تونم(این مثال ساده و شبیه سازی شده است عین کار من نیست):
فرض کنید سه فایل فلش دارم:

  1. فایل اصلی به نام main.fla مرتبط با کلاس mainClass.as که دو فایل زیر را با استفاده از loader لود می کند
  2. فایل شماره1 به نام music.fla مرتبط با کلاس Music.as که کارش اینه که یه mp3 رو پخش می کنه دو متد هم خودم برای کلاسش نوشتم که پخش را متوقف و شروع می کنه به نامهای startPlay و pausePlay
  3. فایل شماره2 به نام buttons.flaمرتبط با کلاس Buttons.as که چند تا کلید توش تعریف شده که قراره این کارها رو انجام بدن : 1.متدهای startPlay و pausePlay را از کلاس قبلی اجرا کنن 2.متدی را از کلاس فایل اصلی یا همون main اجرا کنن
حالا مشکل اینجاست که متدهای کلاس music داخل کلاس buttons شناخته شده نیست و اصولا این فایلها بعد از لود شدن در فایل اصلی می تونن باهم و با فایل اصلی تعامل داشته باشن چطور میشه جداگانه کامپایل کرد و درنهایت در کنار هم گذاشت؟

خودم با استفاده از یک کلاس میانه به نام shared ومتدهای استاتیک مشکل رو حل کردم اما به نظرم این کار اصولی نیست روش درستش رو می خوام

امیداورم خوب مطلب رو رسونده باشم
لطفا راهنمایی کنید
 
آخرین ویرایش:

kodex2

کاربر فعال
سلام،

ببین شما از اولش روش رو اشتباه رفتی اما منطقی ترین راه واسه رفع مشکلت استفاده از ایونت هاست.

شما یه کلاس base داری که 2 تا کلاست دارن توی create میشن.

مثلا اول کلاس music.

شما توی متد های کلاس music بیا یه custom event رو dispatch کن. و از بیرون اون ها رو listen کن. (یعنی توی کلاس مادر یا base).
همینطور توی کلاس button (که البته از این namespace نباید استفاده کنی چون conflict می کنه با کلاس bustton از خود فلش).

بعدش میای توی ایوینت ها این متد هارو بهم مرتبط می کنی.
این منطقی ترین راهه. البته شما اگه از وراثت و oop استفاده می کردی این مشکلات رو نداشتی.
موفق باشید.
 

yaa110

کاربر فعال
خیلی کا را پیچیده کردید، کلاسه music را در button و کلاسه button را در music جداگانه import کنید.
 

sabersoft

Active Member
سلام،

ببین شما از اولش روش رو اشتباه رفتی اما منطقی ترین راه واسه رفع مشکلت استفاده از ایونت هاست.

شما یه کلاس base داری که 2 تا کلاست دارن توی create میشن.

مثلا اول کلاس music.

شما توی متد های کلاس music بیا یه custom event رو dispatch کن. و از بیرون اون ها رو listen کن. (یعنی توی کلاس مادر یا base).
همینطور توی کلاس button (که البته از این namespace نباید استفاده کنی چون conflict می کنه با کلاس bustton از خود فلش).

بعدش میای توی ایوینت ها این متد هارو بهم مرتبط می کنی.
این منطقی ترین راهه. البته شما اگه از وراثت و oop استفاده می کردی این مشکلات رو نداشتی.
موفق باشید.
ممنونم
ممکنه یه سطح پایین تر توضیح بفرمایید؟
 

kodex2

کاربر فعال
یه سمپل واست ضمیمه کردم. این رو ببیینی متوجه میشی. پروژه رو طبق این ساختار باید پیاده کنی.
موفق باشی. (اگه syntax error داشت ببخشید. تحط فلش نوشتم . لایبرری هامو لود نمی کرد. همرو دستی نوشتم.)
 

پیوست ها

  • sample.rar
    1.2 کیلوبایت · بازدیدها: 18

sabersoft

Active Member
یه سمپل واست ضمیمه کردم. این رو ببیینی متوجه میشی. پروژه رو طبق این ساختار باید پیاده کنی.
موفق باشی. (اگه syntax error داشت ببخشید. تحط فلش نوشتم . لایبرری هامو لود نمی کرد. همرو دستی نوشتم.)
ممنونم
خیلی عالی بود چیزای جدیدی یاد گرفتم
اما مثل اینکه منظورم رو درست نگفتم:
ببینید ما در اکشن اسکریپت2 یه چیزی داشتیم به نام root_ و عمومی بود و از طریق او می تونستیم هر فایلی رو که لود می کنیم با . دسترسی داشته باشیم اما در اینجا دیگر نه root عمومی است و نه stage فرض کنید یک فایل لود کرده ایم که حاوی یک button است حالا می خواهیم از فایل دومی که لود کرده ایم به button داخل فایل اول دسترسی داشته باشیم مثلا:
[LTR]
_root.mc1.button._x = 100;
[/LTR]
این کار در اکش 3 نشدنی است(من نمی دانم) چون دیگر یک روت واحد و مرجع وجود ندارد.
 

kodex2

کاربر فعال
آخه شما تو توضیحاتت یه چیز دیگه رو پرسیده بودی:)

as3 هم root داره اما نحوه دسترسیش یه مقدار فرق می کنه.
مثلا شما یه مووی کلیپ داری به اسم mc2 که خودش توی mc1 است. نحوه دسترسیش میشه :
MovieClip(this.parent.parent)

این کد توی mc 2 نوشته مشه که باعث میشه 2 لول بالاسرش رو دسترسی داشته باشه. (این دستور parent)
برای استفاده از root هم میشه : MovieClip(root) (اینم دستور root)

stage یه object از کلاس MovieClip که خودش از کلاس DisplayObject extends میشه. بخاطر همین توی اکشن 3 باید حتما اون رو به عنوان مووی کلیپ صدا بکنی. (در ضمن اگه از class document هم استفاده می کنی باید کلاس رو extends کنی از MovieClip که بتونی به stage دسترسی داشته باشی.
 

sabersoft

Active Member
آخه شما تو توضیحاتت یه چیز دیگه رو پرسیده بودی:)

as3 هم root داره اما نحوه دسترسیش یه مقدار فرق می کنه.
مثلا شما یه مووی کلیپ داری به اسم mc2 که خودش توی mc1 است. نحوه دسترسیش میشه :
MovieClip(this.parent.parent)

این کد توی mc 2 نوشته مشه که باعث میشه 2 لول بالاسرش رو دسترسی داشته باشه. (این دستور parent)
برای استفاده از root هم میشه : MovieClip(root) (اینم دستور root)

stage یه object از کلاس MovieClip که خودش از کلاس DisplayObject extends میشه. بخاطر همین توی اکشن 3 باید حتما اون رو به عنوان مووی کلیپ صدا بکنی. (در ضمن اگه از class document هم استفاده می کنی باید کلاس رو extends کنی از MovieClip که بتونی به stage دسترسی داشته باشی.
ممنونم
مشکل همین جاست
وقتی ما در یک فایل کار می کنیم این مشکل وجود نداره چون یکجا کامپایل میشه اما وقتی چند فایل داریم نمی توانیم این کار را انجام بدیم و خطا دریافت می کنیم.
تا هنگامیک که فایل 1 در فایل اصلی کامل لود نشده parent یه چیز دیگه هست
برای مثال اگر در فایل اصلی یه کلیپ فیلم داشته باشیم به نام mc1 ،نمی تونیم در داخل document class فایل 2 که جداگانه کامپایل میشه و بعدا توسط loader داخل فایل اصلی لود میشه از parent استفاده کنیم یعنی دستور زیر خطا میده :
[LTR]
MovieClip(this.parent.parent).mc1
[/LTR]
 

kodex2

کاربر فعال
اگه شما تحط اکشن 3 از ساختار درستی استفاده کنی نیازی به استفاده از این روش ها پیدا نمی کنی. درست شدن DisplayList توی فلش بخاطر حل این مسائل بود. اون دستوری که شما نوشتی هم کار میکنه اما یه جاش رو احتمالا اشتباه می کنی. احتمالا توی تعداد parant ها این اتفاق میفته. چون یه مقدار گیج کننده است این جو آبجکت ها. یه دیباگر نصب کن realtime این رو چک کن که ببینی مشکل کجاست.

MonsterDebugger خیلی خوبه واسه این جور کارا.
ولی از این به بعد قبل از شروع کد نویسی یه ساختار اول طراحی کن بعد شروع کن.
(توی کارای پیچیده و بزرگ MVC Pattern ) خیلی می تونه کمکت کنه.
موفق باشی.
 

sabersoft

Active Member
ممنون
اگر ممکنه فایلها رو به ساده ترین حالت نوشتم ضمیمه کردم ببینید اشکال کار کجاست
یه سوال دیگه اینکه چه کتابی را برای اکشن 3 پیشنهاد می کنید اینطور که من پیش می رم فایده نداره:sad:
 

پیوست ها

  • test.zip
    52.3 کیلوبایت · بازدیدها: 8

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

بالا