سوال : مشكل در Target Path در AS3

mmpflash

New Member
سلام

ما در AS2 دو نوع Target Path داشتيم :

1. نسبي ( this.mc1.mc2._x يـــا parent._parent.mc._x_ )
2. مطلق ( root.mc1.mc2._x_ )

اما با تغيراتي كه در ساختار AS3 به وجود آمده از displayList و displayObject استفاده ميكنه و ديگه به صورت قبل نميشه به مووي كليپ ها دسترسي داشت مثلا parent.parent.mc.x ‌ يا root.mc1.mc2.x با هشدار مواجه ميشه.

حالا اگه كسي اطلاعات كاملي در مورد Targrt Parh در AS3 داره با مثال اينكه در AS2 چي بوده و حالا در AS3 چه جوري بايد بنويسيم توضيح بده ممنون ميشم.
 
آخرین ویرایش:

BioDread

Banned
سلام

ما در AS2 دو نوع Target Path داشتيم :

1. نسبي ( this.mc1.mc2._x يـــا parent._parent.mc._x_ )
2. مطلق ( root.mc1.mc2._x_ )

اما با تغيراتي كه در ساختار AS3 به وجود آمده از displayList و displayObject استفاده ميكنه و ديگه به صورت قبل نميشه به مووي كليپ ها دسترسي داشت مثلا parent.parent.mc.x ‌ يا root.mc1.mc2.x با هشدار مواجه ميشه.

حالا اگه كسي اطلاعات كاملي در مورد Targrt Parh در AS3 داره با مثال اينكه در AS2 چي بوده و حالا در AS3 چه جوري بايد بنويسيم توضيح بده ممنون ميشم.

برای parent باید نوع parent رو مشخص کنی
MovieClip (parent).mc.x
و برای مطلق : منم درست به جواب کاملی نرسیدم
ولی باید نوع رو باز مشخص کنی
MovieClip (root).mc2.x
 

mmpflash

New Member
biodread جان ممنون ، خيلي mp3 گفتي

لطفا كسي كامل تر و جامع تر (بصورت مقاله) توضيح بده كه اين مشكل به صورت اساسي براي AS2 كارها حل بشه

ممنون
 

BioDread

Banned
biodread جان ممنون ، خيلي mp3 گفتي

لطفا كسي كامل تر و جامع تر (بصورت مقاله) توضيح بده كه اين مشكل به صورت اساسي براي as2 كارها حل بشه

ممنون

من توضیحاتم به نظرم گویا بود!
یعنی میگی یه نفر پیدا میشه یه مقاله راجع بش بنویسه؟
 

mmpflash

New Member
من توضیحاتم به نظرم گویا بود!

بر منكرش لعنت ، ( قربونت برم بچه كه زدن نداره :cry: ، چرا نارحت شدي) منظورم اين بود كه كامل نبود بيشتر هم مي شد توضيح داد. به قول خودت " برای مطلق : منم درست به جواب کاملی نرسیدم "

یعنی میگی یه نفر پیدا میشه یه مقاله راجع بش بنویسه؟

چرا پيدا نميشه ، توكلت به خدا باشه.
 

pourkoushki

New Member
مقاله درباره root / parent در AS3

بسم الله الرحمن الرحيم

بيشتر برنامه نويسان AS2 وقتي رو به AS3 مي‌آورند با اين موضوع حتما برخورد خواهند كرد كه چرا مسيرهاي parent و root به آن شكلي كه در نگارشهاي قبلي با آن كار مي‌كردند فرق كرده ، من در اين مقاله تا حدي به اين مسئله مي‌پردازم ، پس در ابتدا براي درك بهتر با يك مثال آغاز مي كنيم :
ما در تايم لاين اصلي فلش و در stage ، دو عدد مووي كليپ با نام هاي clip1_mc و clip2_mcداريم و در درون clip1_mc يك فرزند از نوع مووي كليپ با نام clip3_mc را ايجاد نموده‌ايم. مي‌خواهيم از درون clip3_mc و در فريم 1 به موقعيت x مووي كليپ clip2_mc روي تايم لاين اصلي دسترسي نماييم.

PHP:
// AS2
// مسير نسبي
this._parent._parent.clip2_mc._x;
// مسير مطلق
_root.clip2_mc._x;
 
 
 
// AS3 براي حل مثال فوق در 
// مسير نسبي
MovieClip(parent.parent).clip2_mc.x;
Object(parent.parent).clip2_mx.x;
// or
var myParent = parent.parent;
myparent.clip2_mc.x;
 
// مسير مطلق
MovieClip(root).clip2_mc.x;
Object(root).clip2_mc.x;
// or
var myRoot = root;
myRoot.clip2_mc.x;

اگر در مثال فوق ، فرمت كد AS2 را براي AS3 استفاده مي‌كرديم با خطا مواجه مي‌شديم. چون در AS3 يك مفهوم جديد و اساسي بنام DisplayList (ليست نمايش) مطرح شده است ، ليست نمايش ، ساختارهاي درختي سلسله مراتبي دارد كه تمام DisplayObject (شي نمايش) ها به آن اضافه مي‌شوند. بالاترين شي نمايش ، يعني root (ريشه) درخت يك DisplayObjectContaner (كانتينر شي نمايش) Stage است كه مي‌تواند شامل چندين شي نمايش و يا كانتينرهاي شي نمايش ديگه هم باشد. در پايين كانتينر Stage ، تايم لاين اصلي (فايل swf اصلي برنامه) وجود داره كه معمولا كانتينر MovieClip است (اين كانتينر مي‌تواند نوع ديگر گسترش يافته (Extends) از كانتينر Sprite هم باشد).

AS3-DisplayList.jpg


لازم به ذكر است كه DisplayObjectContaner ها ، زير كلاسي از كلاس DisplayObject است كه شامل (Stage – Sprite – MovieClip – Loader) مي‌باشد و فقط كانتينرهاي شي نمايش مي‌توانند داراي فرزنداني از نوع شي نمايش و يا حتي از نوع خود كانتينرهاي ديگر باشند.

AS3-DisplayObject.gif


پس مطالب فوق به اين صورت شد كه ، ما DisplayList اي داريم كه تمامي شي نمايش هاي ما را نشان مي‌دهد ، اولين كانتينر اين ليست نمايش ، كانتينر شي نمايش Stage است و داخل اين كانتينر Stage ، كانتينر ديگري كه همان تايم لاين اصلي ماست و از نوع MovieClip است وجود دارد. و مابقي ساختار اين درخت رو ما بايد با اضافه نمودن كانتينرهاي مورد نظر خود و بسته به ساختار برنامه‌هايمان ايجاد كنيم به عبارتي ديگر كانتينرها مثل شاخه‌هاي اين درخت مي‌مانند كه به اندازه دلخواه مي‌توانند توسط فقط اضافه كردن كانتينرهاي جديد شاخه دار شوند و مي‌توانند به اندازه شي نمايش‌هاي داخل خود ، برگ (فرزند) داشته باشند. (جهت اطلاعات كاملتر به Help فلش مراجعه نماييد)
حالا با اين توضيح اجمالي از ساختار ليست نمايش AS3، به سه خصوصيت: root و parent و Stage در AS2 و AS3 مي‌پردازيم.

root_ در AS2 :
خصوصيت root_ در As2 ، هميشه به تايم لاين اصلي (فايل swf اصلي) ما اشاره دارد. زيرا اين يك متغير از نوع global (عمومي و سراسري) فيلم فلش ما محسوب مي‌شود. به همين خاطر است كه اگر يك swf خارجي كه از خصوصيت root_ در آن استفاده شده را در فايل swf اصلي‌مان بارگذاري كنيم ، root_ به تايم لاين اصلي بارگذاري شونده‌ اشاره خواهد كرد نه swf بارگذاري شده. (مگر اينكه خصوصيت lockroot_ را براي swf خارجي برابر True قرار داده باشيم)

root در AS3 :
خصوصيت root در AS3 ، هميشه به تايم لاين اصلي (فايل swf اصلي) ما اشاره نمي‌كند و به عنوان يك متغير متعلق به DisplayObject خود معرفي مي‌شود. خصوصيت root هم اكنون مبني بر ساختارهاي درختي سلسله مراتبي از شي است و به همين خاطر است كه root هميشه به شي يكساني اشاره نمي‌كند. براي درك بهتر به نكات زير توجه نماييد:
1. root براي شي Stage ، اشاره به خود شي Stage دارد.
2. root براي تايم لاين اصلي و تمام DisplayObject هاي داخل آن ، اشاره به تايم لاين اصلي دارد.
3. root براي DisplayObject هايي كه در swf بارگذاري شده‌اند ، اشاره به تايم لاين اصلي فايل swf دارد.
4. root براي تصاوير بارگذاري يك شي Bitmap ، اشاره به خود شي Bitmap دارد.
5. root براي نمونه‌اي از كلاس اصلي از فايل swf اول بارگذاري شده ، اشاره به خود DisplayObject دارد.
6. root براي هر DisplayObjet كه به DisplayList اضافه نشده باشد ، Null است.
(شايد مواردي جا افتاده باشه كه خودتون با تمرين و مطالعه به آنها پي ببريد)

AS3-root.jpg


parent_ در AS2 :
خصوصيت parent_ در AS2 ، هميشه به آبجكتي كه شي جاري ، شامل آن است اشاره دارد. و راهي است براي پيمايش يك ساختار درختي كه از نوع MovieClip است. همه اشياي بصري در تايم لاين اصلي با level0_ شروع مي‌شوند و يا به عبارتي ، زنجيره والد بالاي سلسله مراتب كانتينر level0_ را مي‌پيمايد. مگر اينكه با دستور loadMovieNum فايل swf خارجي را در level_ ديگري بارگذاري كنيم.

parent در AS3 :
خصوصيت parent در AS3 ، كانتينر شي نمايش كه حاوي همين شي نمايش است را نشان مي‌دهد. خصوصيت parent براي مشخص كردن يك مسير وابسطه يه شي نمايش كه بالاي شي نمايش جاري در ليست سلسله مراتبي است بكار مي‌رود.

Stage در AS3 :
ريشه ليست نمايش است يعني بالاترين شي نمايش در ساختار سلسله مراتبي درخت محسوب مي‌شود. شما مي‌توانيد با استفاده از خصوصيت Stage هر شي نمايش به كانتينر Stage دسترسي پيدا كنيد و هر برنامه فقط مي‌تواند داراي يك كانتينر Stage باشد.

نكته آخر بحث اينكه:
1. در AS2 تمامي اشيا درون كلاس MovieClip ايجاد و يا حتي ترسيم مي‌شدند و خود فلش مي‌دانست شي parent_ و يا root_ شما از چه كلاس و جنسي است ولي در AS3 كه Class-Base است MovieClip يكي از كلاسهاي كانتينر آن را تشكيل مي‌دهد. بنابراين شما در هنگام استفاده از parent و root بايد به فلش بگوييد كه از چه كانتينر شي نمايشي داريد استفاده مي‌كنيد.
2. در AS2 اشيا بصري درون فيلم فلش به ترتيب چيدمان خطي اضافه مي‌شوند (از طريق سطوح عمق) ولي در AS3 ساختارهاي درختي سلسله مراتبي و مباحث DisplayList و DisplayObject و DisplayObjectContaner مطرح است.

يا علي

 
آخرین ویرایش:

BioDread

Banned
مرسی از مقالت
منو نجات داد

پس main time line ما دو نوع میتونه جنس داشته باشه که یکی MovieClip و دیگری Object
درسته؟

و نمیشه آدرس رو از stage شروع کرد؟!
چون stage خیلی بالا هست و نمیشه
درسته؟
 
آخرین ویرایش:

pourkoushki

New Member
پس main time line ما دو نوع ميتونه جنس داشته باشه که يکي MovieClip و ديگري Object
درسته؟

جنس تايم لاين MovieClip است و از كلاس Object ارث مي‌بره.

نميشه آدرس رو از stage شروع کرد؟!

معمولا از stage براي آدرس دهي استفاده نمي‌شود بلكه از DisplayObject ها براي آدرس دهي به stage استفاده مي‌شود.
 

BioDread

Banned
هر سری مقالتو می خونم بیشتر حال میکنم
عکس هم که گذاشتی خیلی کامل شد
مرسی
 

khorzu

Member
مگر اينكه خصوصيت lockroot_ را براي swf خارجي برابر true قرار داده باشيم
چه مشقت ها که برای فهمیدن این موضوع نکشیدیم و چه تاپیک های همیشه یک پُسته ای که برای رسیدن به این جواب نزدیم ...
حیف که فقط یک بار می شه این
post_thanks.gif
لعنتی رو فشار داد ...
 
آخرین ویرایش:

sizanjavad

کاربر فعال
مگر اينكه خصوصيت lockroot_ را براي swf خارجي برابر true قرار داده باشيم
چه دهنها كه از من سرويس نشد به خاطر همين swf هاي لود شده و root شون. نكته خيلي مفيدي بود. ولي كاش دو سال پيش ميگفتي!!!
 

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

بالا