دسترسی به Object(root)

Dr.Ezraeel

Member
سلام
میخواهم به stage از طریق یک کلاس دسترسی داشته باشم کلاسی که داخل یک موی کلیپ درون تایم لاین تعریف شده ولی نمیتوانم دسترسی داشته باشم!
ممنون

فایل نمونه هم گذاشتم برای درک بیشتر موضوع.

مشاهده پیوست root.rar
 

niny-goloo

Member
سلام
من که نتونستم فایل شما رو باز کنم ولی معمولا Stage باید به صورت یه متغییر به کلاس فرستاده بشه
یعنی کلاس باید یه آرگومان ورودی داشته باشه و Stage یه root رو به اون بفرستیم
 

++Hadi++

Active Member
به دو روش شدنیه:
1- یه متد (تابع) داشته باشید که stage رو مستقیما بگیره.
2- یه شی مووی کلیپ یا sprite در کل displayObject از صحنه اصلی وارد اون کلاس کرده باشید از طریق اونم می تونین به stage دسترسی داشته باشید...
PHP:
public function GetStage(_stage:Stage):void
{
   myStage=_stage;
}

public function getMC(mc:MovieClip):void
{
   myStage=mc.stage;
}
 

niny-goloo

Member
کاکو هادی روشی که من گفتم اشتباه بود؟
محض اطلاعا خودم میخوام بدونما :دی
 

Dr.Ezraeel

Member
ممنون از جواب ولی اگر فایل رو دیده باشید متوجه ایرادی که وجود دارد میشوید.

توی فایل دقت کنید که من نمیتونم متغییر رو که در داخل موی کلیپ در تایم لاین هست رو از کلاس تغییر بدم چرا که root من null هست.
راه حلی که ارائه داده اید برای دسترسی به stage هست و من نمیخوام stage رو دستکاری کنم میخوام یک متغییر رو دستکاری کنم که اونهم با stage شدنی نیست و با root میشه همچین کاری رو انجام داد.
ممنون میشوم از ارائه راه حل

نسخه پائین ترش رو گذاشتم و کمی هم تغییرش دادم.
 

پیوست ها

  • root_2.rar
    7 کیلوبایت · بازدیدها: 6
آخرین ویرایش:

++Hadi++

Active Member
متاسفانه وقت زیادی ندارم ولی مخصوصا تو سورسایی که با class پیش می برید بهتره دستور زیر رو تو کانسترکتور بنویسید تا از بالا اومدن stage مطمئن بشید :
PHP:
if(stage)INIT(null);
else addEventListener(Event.ADDED_TO_STAGE,INIT);
function INIT(evt:Event):void
{
  removeEventListener(Event.ADDED_TO_STAGE,INIT);
Continue();
}
بعد بهتره یه کلاس بوجود بیارید به عنوان کلاس Globals که آموزش و سمپلش تو اینجا هست

http://www.forum.majidonline.com/showthread.php?t=181437
و در تابع INIT شی stage رو به اون پاس بدین یعنی مثلا:
PHP:
 Globals._STAGE=stage;
بعد تو هر کلاس یا هر جایی کافیه اون کلاس استاتیک رو import کنین و بعدش به اون stage دست پیدا کنین در ضمن شی stage یه جورایی readyOnly هست و پارامتراشو نمی تونین عوض کنین و فقط بهش می تونین دسترسی داشته باشید پس با این کار هیچ تغییری در stage وارد نمی شه.بای...
 

Dr.Ezraeel

Member
ممنون آقا هادی ولی تکلیف تغییر متغییر چی میشه؟ من با stage کاری ندارم توی سورس اولی که گذاشته بودم فکر میکنم این کارها رو هم کرده بودم ، حالا راه حلی نداره که مقدار متغییر رو بشه عوض کرد؟
 

++Hadi++

Active Member
شما تو فریم اول شی کلاستونو بوجود آوردین.در صورتیکه تو اون فریم اثری از lod نیست...خوب نباید هم بتونین بش دتذسی داشته باشید چون تو یه لایه ،اگر یه فریم دارای یه متغیر شه،فریم های بعدی به صورت Internal می تونند به اون دسترسی داشته باشند.نه فریم های قبلی.در ضمن مووی کلیپ هم فقط در فریمی که وجود داره و نه در فرم های دیگه قابل دسترسی هست.به نظر من بهتره همشونو یه فرم کنین تا به اون دسترسی داشته باشید و تقریبا هیچ راهی رو نداره مگر ایکه با یه وقفه بزارید تا فریم اصلیتون به اونجا برسه و با متغیر سراسری به اون دست پیدا کنید.تنها راهی که هست اینه که بعد از مثلا 2 ثانیه که مطمئنین فریم به اونجایی که مووی کلیپ هست رسیده باید به روشی که براتون آپ کردم به اون دسترسی پیدا کنین و غیر از این راهی نداره.در ضمن بدونید که چون شی کلاس cla در هیچ چیزی child نداره،پس روتی هم نداره و البته روتش null هست چون روت جزو مشخصه های کلاس مووی کلیپ و sprite هست منتها اینجا خالی هست .
 

پیوست ها

  • root_3.rar
    9.4 کیلوبایت · بازدیدها: 3

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

بالا