آموزش ActionScript 3.0 از صفر تا بینهایت

شروع موضوع توسط sizanjavad ‏21 ژانویه 2009 در انجمن Action Script 3

وضعیت موضوع:
موضوع بسته شده است.
  1. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    اكشن اسكريپت به صورت قوي از نسخه 4 فلش به بعد مطرح شد. از اون موقع تا حالا مطالب بسيار زيادي در مورد اكشن نوشته شده و نوشته خواهد شد. در مورد اكشن اسكريپت 2 در ايران كارهاي خوبي صورت گرفت و برنامه نويساي خوبي در ايران پيدا شدن كه به اين زبان تسلط كافي پيدا كردن و نمونه كارهاي خوبي هم از اونا ارائه شد. ولي باز هم برنامه فلش با اينكه بين ايراني ها برنامه معروف و محبوبيه با قابليتهاي واقعي خودش شناسانده نشد و از نظر من هنوز هم نشده.
    بنده از فلش 5 با اين برنامه آشنا شدم و از اون موقع جسته و گريخته با اين نرم افزار درگير شدم و مثل خيلي هاي ديگه اوايل تنها چيزي كه تمام حواسم بهش معطوف بود تايم لاين فلش بود و تنها كاري كه بلد بودم ساخت كليپ هاي انيميشني بود ولي كم كم كه بيشتر باهاش كار كردم ديدم كاراي خيلي بيشتري ميشه با اين نرم افزار استفاده كرد. از اون موقع بود كه آروم آروم شروع كردم به يادگيري action script. از همون موقع يكي از دغدغه هاي من منبعي براي يادگيري كامل و اصولي اين بخش از فلش بود ولي متاسفانه مطالب حول اين زمينه ناياب بودن و براي هر كار كوچيكي كه داشتم مجبور بودم ساعتها و يا حتي روزها وقت بذاريم و در اكثر موراد با شكست مواجه مي شدم. تا اينكه بحث forum ها توي ايران پا گرفت و تا حدي مشكلات كمتر شد.
    ولي متاسفانه به دليل كمبود منابع من اكشن رو صحيح و اصولي ياد نگرفتم(مثل خيلي چيزاي ديگه:D) و الزاما هر موقع هرجا سوالي برلم پيش ميومد مي رفتم دنبالش و فقط به فكر پيدا كردن جوابش و رفع مشكل بودم و برام مهم نبود كه مشكلم رو چجوري دارم حل مي كنم. فقط مشكل حل بشه بقيش با خدا.
    با پيدايش as3 كلا مجبور شدم بزنم گاراژ و فهميدم كه بايد آستينم رو بالا بزنم يه كاري بكنم. اين بود كه راه افتادم تا اكشن و كلا اصول برنامه نويسي رو از پايه شروع كنم و به وضعيت اطلاعات به هم ريختم يه سر وساموني بدم اين شد كه شروع كردم به يادگيري اكشن اسكريپت 3 از سطح صفر. اما هرچي سعي كردم يه مرجع ايراني پيدا كنم كه درست و حسابي اون رو آمورش داده باشه پيداش نكردم حتي تو فروم هام جايي نبود كه به صورت اصولي و پايه مفاهيم ياد داده شده باشن . فرم ها محدود شده بودن به پاسخ هاي جزيي به سوالات و اگرم آموزش بود آموزهاش پراكنده مثلا آموزش ساخت mp3 player كه برا يه كاربر صفر مناسب نبود. انگار كسايي كه بلد بودن نمي خواستن به بقيه ياد بدن . شايدم وقت نداشتن كه ياد بدن. اين بود كه تصميم گرفتم خودم دست به كار بشم و يادگيري رو شروع كنم. پس يه كتاب درست و درمون گرفتم و شروع كردم به خوندن و ياد گرفتن.
    ديدم حالا كه مجبورم كتاب رو بخونم و ترجمش كنم بهتره درس به درس بزارم اينجا كه يه جورايي سايت مرجعه و خيلي هم بهش مديونم تا علاوه بر اينكه زكات علمم رو به جا آورده باشم انگيزه اي بشه براي اين كه كارم رو جدي تر و مقيد تر انجام بدم.
    -------------------------------------------------------------------------------------------------------------------------------------------
    حالا بعد از اين همه توضيح و تفسير! لپ كلام اينكه مي خوام اينجا آموزش اكشن اسكريپت 3 رو تو اين تاپيك به صورت پايه اي و منسجم شروع كنم. البته آموزش كه نه! يه جورايي ترجمه + تجربياتم + تجربيات بقيه دوستان
    ذكر چند نكته رو ضروري مي بينم:
    1- اين تاپيك رو توي بخش آموزش ها و مقالات نذاشتم چون معتقد هستم كساني خواننده اين مطالب خواهند بود كه اگرچه الزاما نيازي نيست كه قبلا اكشن كار بوده باشن ولي حداقل مي دونن اكشن اسكريپت چي هست
    2- علاوه بر ترجه كتاب و استفاده از سمپل هاي اون در صورت نياز يه سري توضيحات و شايد مثالهاي اضافه هم بزارم.
    3- جزئي ترين مفاهيم در حد توان توضيح داده خواهند شد تا هيچ ابهامي در مطالب وجود نداشته باشه
    4- از دوستاني نظير : khorzu - amir_s - biodread - avang2005 - mohsensemsar كه مي شناسمشون و مي دونم هميشه فعال هستند و علمشون هم بالاست خواهش مي كنم تو اين تاپيك بهم كمك كنن . همچنين بقيه دوستاني كه مي تونن كمك كنن.
    5- دوست عزيزم mohsensemsar مطالب اين تاپيك رو به صورت پيوسته و دنبال هم در تاپيك http://www.forum.majidonline.com/showthread.php?t=114526 قرار ميدن+فايلهاي attach شده خودشون

    آخيش دستم خسته شد :neutral:

    فصل دوم آموزش اكشن اسكريپت 3 ، مفاهيم پايه ، به اتمام رسيد! از لينك زير مي تونيد فصل اول و دوم رو دانلود كنيد. 13 خرداد 1387
    [​IMG]
    دانلود فصل اول و دوم آموزش actionscript3


    فصل سوم آموزش اكشن اسكريپت 3 ، Displaylist ، به اتمام رسيد! از لينك زير مي تونيد فصل سوم رو دانلود كنيد. 25 مرداد 1387
    [​IMG]
    دانلود فصل سوم آموزش actionscript3



    -----------------------------------------------------------
    ویرایش توسط هادی
    -----------------------------------------------------------

    [​IMG]

    برای دانلود فایل PDF فصل چهارم یا همان شی گرایی از سایت پرشین گیگ اینجا را کلیک کنید (حجم فایل زیپ شده : 4.60 مگابایت)
    توجه :تمامی مثالهای و فایل های دیگر پیوست شده مربوط به بحث شی گرایی (دروس بیستم تا سی ام ) در یک فایل تجمعی فشرده قرار گرفته و آپ شد . برای دانلود این فایل می تونید به لینک زیر مراجعه کنید :

     
    آخرین ویرایش: ‏16 آگوست 2009
    نوشته شده توسط sizanjavad در ‏21 ژانویه 2009
    SajjadKhati، ramin88، sampersy و 210 نفر دیگر از این ارسال تشکر کرده اند.
  2. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس اول - معرفي action script و تاريخچه آن

    بسم الله الرحمن الرحيم
    قبل از شروع لازم مي دونم از دوست عزيزم mohsensemsar به خاطر حسن توجهشون تشكر كنم و بگم رو كمكش مثل ساير دوستان حساب مي كنم.

    براي شروع طبق روال هميشگي آغاز هر آموزش،بهتره كه يه نگاه اجمالي به actionscript و تاريخچه اون بندازيم.
    اولين نسخه برنامه فلش توسط شركت ماكرومديا در سال 1996 ارائه شد. فلش در نسخه هاي اوليه با هدف ايجاد برنامه اي براي ساخت انيميشن توسط كامپيوتر شكل گرفت ولي بعدها به صورت حريصانه (و البته قدرتمندانه!) گامهاي بعدي خودش رو در زمينه هايي هچون وب ، پروژه هاي مالتي مديا ، موبايل و حتي برنامه هاي دسكتاپ هم برداشت. برنامه نويسي به شكل ساده از همون نسخه هاي اول با فلش همراه بود.
    از نسخه هاي 1 تا 3 نام زبان برنامه نويسي فشل، "لينگو لايت" بود. ولي اين زبان از نسخه 4 به بعد به " action script " تغيير نام داد تا با طي روند رو به رشدش خودش در نسخه هاي بعدي به action script 3 رسيد.

    خوب حالا ببينيم اصلا action script به چه دردي مي خوره؟
    با چند مثال ساده شروع مي كنيم؟
    1) فرض كنيد در حال ساخت يه انيمشين هستيد و هنرپيشه نقش اول شما (مثلا فردين:D) تو سكانس پاياني توسط آدم بداي فيلم مورد حمله قرار مي گيره و يه تير بهش شليك ميشه. شما مي خواين برا اين كه تاثير بيشتري روي بينندتون بذارين صحنه اي رو كه تير به هنرپيشه برخورد مي كنه رو چند بار به طور سريع دنبال هم تكرار كنيد . اولين راهي كه به ذهن مي رسه اينه كه اون صحنه رو يه بار درست كنيد و فريم هاي مربوط به اون رو 3 - 4 بار دنبال هم كپي و paste كنين. شايد در نظر اول راه جالي باشه اما فكر كنيد شما مي خوايد اين فيلم رو روي يه سايت قرار بدين و بيننده هاي شما يوزرهاي ايراني با اينترنت dialup هستن. اين كار شما باعث چي ميشه؟ خوب معلومه افزايش حجم و بالتبع كاهش سرعت لود!!! تازه ممكنه شما كارگردان خوش ذوقي باشين و بخواين از اين صحنه هاي تاثير گذار زياد تو فيلمتون داشته باشين! اون وقته كه ديگه واويلا! خوب حالا اينجا مي تونين از يه زباني به نام action script استفاده كنين. به اين صورت كه تو اون صحنه ي مربوط به تير خوردن اون فريم هايي كه قراره تكرار بشن رو در انتهاشون بنويسين " اگه به اين نقطه رسيدي برگرد به فريم اول مربوط به قسمت تير خوردن و اين كار رو 3 بار انجام بده" به همين راحتي با يه دستور كوچيك شما كار چندصد يا حتي چندين هزار فريم رو انجام مي دين!!!:shock:

    2) شما در حال ساخت يه سي دي مالتي مديا براي معرفي محصولات يك شركت هستيد. مثلا پوشك بچه!!!:lol: مي خوايد با كليك بر روي يك محصول ويژگيهاي اون رو روي صفحه نمايش بدين. اينجاست كه باز هم بايد از action script استمداد بطلبيد و با اون به برنامه فلش حالي كنين كه "اگر روي اين دكمه كليك شد اين صفحه رو نشون بده"

    3) شما براي يه شركت يه وبسايت با فلش طراحي كردين. مدير شركت از شما مي خواد كه در قسمت تماس با يه فرم ايجاد كنيد كه مشتريها بتونن سفارشات خودشون رو بصورت آنلاين از طريق فرم به شركت بدن. باز هم كار شما به action script گير مي كنه و شما بوسيله اين زبان باسد به برنامه فلش بگين كه " اگر قسمت هاي سفارش فرم پر بود و كليد ارسال زده شد اطلاعات موجود در فرم رو بفرست به صندوق ميل شركت"

    و خيلي چيزاي ديگه كه در ادامه بهشون خواهيم پرداخت. لپ كلام هر موجودي يه زبوني داره كه بشه باهاش ارتباط برقرار كرد زبان صحبت كردن و دستور داده به برنامه فلش هم action script هست. همين!!!

    اگر اشتباه نكنم، امتياز فلش از نسخه 7 (يا 8) توسط شركت adobe از شركت macromedia خريده شد و روند صعودي فلش سرعت بيشتري گرفت و همچنين برنامه ها و تكنولوژي هاي وابسته جديدي نظير flex ، air ، flash lite هم معرفي شدند كه به محبوبيت و كاربردي تر شدن اين برنامه كمك كردند.
    شايد بتوان مهمترين تحول ايجاد شده توسط adobe را براي فلش ارائه نسخه سوم action script دانست.
    يكي از ويژگيهاي زبان action script 3 اينه كه بر خلاف دو نسخه قبلي اجازه ماست مالي رو به كاربر نمي ده!!! و برنامه نويس رو مجبور مي كنه تا برنامه خودش رو كاملا اصولي و تو يه چارچوب معين بنويسه. اينكار باعث پديد اومدن ويژگيهاي بسيار خوبي ميشه كه انشاء الله اگه خدا عمري بده تو جلسه هاي آينده باهاشون آشنا خواهيم شد.
    syntax( گرامر) اين زبان بسيار شبيه به گرامر زبانهاي معروف برنامه نويسي نظير java و #c هست. بنابر اين كسايي كه قبلا با اين زبان ها آشنايي داشتن مي تونن به راحتي با اين زبان ارتباط برقرار كنن
    ويژگي بعدي اين زبان اينه كه مثل همون دو تا زباني كه در بالا بهشون اشاره شد شي گرا است (object-oriented) انشاء الله در درس هاي آينده مفاهيم شي گرايي(oop --- مخفف object oriented programing ) رو در موردشون بحث خواهيم كرد.
    هسته زبان action script 3 بر پايه خصوصيات زبان (ECMAScript(4th edition  نوشته شده. زبان معروف اسكريپتينگ javascript هم از ECMAScript براي هسته زبان خودش استفاده مي كنه. اين استفاده مشترك باعث شده شركت َAdobe به شركت موزيلا (توسعه دهدنه مرورگرفايرفاكس ) پيشنهاد كنه در نسخه 3 اين مرورگر javascript 2 رو با كدهايي بر مبناي action script پياده سازي كنه. والا ديگه خبر ندارم كه موزيلا اين كار رو كرد يا نه؟!!:-?
    action script مي تونه روي سه نوع محيط كاربري استفاده بشه Adobe AIR, Flash Player,Flash Lite (البته فلش لايت action script 3 پشتيباني نمي كنه. ولي action script نسخه 2 رو پشتيباني مي كنه)


    فكر مي كنم براي معرفي ديگه همين قدر كافي باشه. درس بعدي رو با معرفي مفاهيم پايه اي و كلمات كليدي action script ادامه خواهيم داد.
     
    آخرین ویرایش: ‏28 فوریه 2009
    نوشته شده توسط sizanjavad در ‏22 ژانویه 2009
    sara20012، mehradasadi، majid_jaki و 75 نفر دیگر از این ارسال تشکر کرده اند.
  3. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس دوم

    بسم الله الرحمن الرحيم
    قبل از شروع لازم مي دونم از دوستانيكه در حدفاصل اين پست تا پست قبلي لطف كردن و به تكميل شدن بحث كمك كردن(Insomnia - biodread arashtavoosi ) تشكر كنم.


    خوب اين درس رو با معرفي يه سري كلمات كليدي و مفاهيم بنيادي برنامه نويسي شروع مي كنيم و مابينش يه مقدار بيشتر از actionscrip3 خواهيم گفت.
    يك برنامه (program) به مجموعه اي از دستورات (instructions) گفته مي شه كه مي تونه بوسيله يه نرم افزار يا كامپوتر مي تونه اجرا بشه.
    اون دستوراتي رو كه توسط برنامه نويس نوشته مي شه source code ناميده مي شه. دستورات بوسيله syntax يا گرامر به كامپايلر (اين كلمه در پايين توضيح داده شده) تفهيم مي شن. syntax در حقيقت يه جور فرم دادن به دستوراته. مثل زبان فارسي كه براي بيان جملاتش دستور زبان داريم زبانهاي برنامه نويسي هم براي اينكه به كامپايلر تفهيم بشن به syntax متوسل مي شن.
    براي نوشتن actionscrip3 شما فقط به جايي نياز دارين كه بتونين توش بنويسين حالا مي خواد notepad باشه يا word يا هر ويرايشگر متن ديگه!!!
    اما اكثر برنامه نويسا براي نوشتن actionscrip3 از ابزارهاي ويژه شركت Adobe مثل ابزار ويژه محيط خود فلش يا flex builder استفاده مي كنن. (flex builder هم از actionscrip3 پشتيباني مي كنه و از MXML كه يه زبان برمبناي xml براي توصيف محيط ارتباط كاربريه (intrface))
    برنامه هاي نوشته شدخ توسط actionscrip3 مي تونن توسط سه نوع محيط نرم افزاري شناخته و اجرا بشن : Adobe Air - Flash liteوَ Adobe Flash Player. در ادامه درسها در مورد هر كدومشون توضيح خواهيم داد. ولي اين رو بدونين كه هر كدوم از اين سه نوع محيط رو در اصطلاح flash client runtime environments مينامند:shock: و هر كدومشون يه نوع ماشين تو دلشون دارن كه مي تونن actionscrip3 رو به وسيله اون اجرا كنن. (AVM- action script virtual machine)
    قبل از اينكه action script توسط Flash client runtime environments (هر كدوم از اون سه محيطي كه در بالا گفته شد) اجرا بشه بايد از كدهاي نوشته شده توسط برنامه نويس همون source code تبديل بشه به كد دودويي ( تنها زباني كه كامپيوتر حاليشه) اين تبديل توسط كامپايلر (compiler) انجام ميشه. پس تا اينجا فهميديم كه ما براي دستور دادن به كامپوتر ابتدا دستورات خودمون رو توسط يه گرامر خاص يا syntax مي نويسيم كه تا حدي به زبان خودمون شبيه و بعد يه موجودي به نام كامپايلر مياد و اين نوشته هاي ما رو به زبان دودويي (صفر و يك) تبديل مي كنه تا كامپوتر اون رو بفهمه.
    action Script هاي كامپايل شده با پسوند swf شناخته مي شن. پس swf حاوي كدهاي كامپايل شده actionscript و مدياهاي مورد نياز action script هست .(البته به صورت دودويي!!!)

    پس اگه بخوايم به صورت خلاصه اين درس رو تو چند جمله مرور كنيم مي تونيم بگيم كه يه برنامه Action script مجموعه اي از دستورالعمل هاست كه مي تونن به وسيله يكي از محيط هاي : Adobe Air- Flash liet يا Flash Player اجرا بشن.
    Action script مي تونه بوسيله يه ويراشگر متن مثل Notepad يا ابزارهاي استاندارد Adobe (كه البته امكانات بسيار ويژه اي دارن) نوشته بشه.
    براي اجراي كدهاي Action script ابتدا بايد اونا رو كامپايل كنيم تا براي ماشين قابل فهم باشن كه كامپايلر ويژه اينكار همراه خود برنامه فلش هست و شما با يك كليك مي تونين كد خودتون رو كامپايل كنين. (يا به وسيله Flex Builder 2)

    :shock:قاعدتا بحثاي مقدماتي هر موضوعي براي كسايي كه تازه شروع كردن يه كم خسته كننده و نامفهوم هستن. اگه زياد ازشون سر در نمي آريد (البته تازه كارها) زياد نگران نباشيد. تو درساي بعدي كه با مثال همراه هستن مفهومشون رو به صورت عملي لمس مي كنيد و براتون روشن ميشن.
    تو درس بعدي مفاهيم مفاهيم بنيادي تر و كاربردي تري رو توضيح خواهيم داد و انشاء الله اولين كد خودمون رو با فلش خواهيم نوشت
     
    آخرین ویرایش: ‏25 ژانویه 2009
    نوشته شده توسط sizanjavad در ‏25 ژانویه 2009
    majid_jaki، farzandanerooz، PedramKarimi و 65 نفر دیگر از این ارسال تشکر کرده اند.
  4. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس سوم

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

    قبل از شروع درس در جواب animations كه گفتن مطالب ترجمه هستند يا تجربيات. مطالب شامل ترجمه دوتا كتاب + يه كتاب فارسي As2 + تجربيات خودم + مقالات اينترنتي + help فلش هستند. هر جا كه احساس كنم يه مطلب به درد بحث مي خوره و اون رو تكميل مي كنه اضافه مي كنم. البته خيلي دوست دارم بقيه دوستان هم به كامل شدن درس ها كمك كنن.

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

    البته قبل از شروع مفاهيم يه چندتا نكته كوچيك رو بگم كه تو مثالهايي كه ميارم دچار مشكل نشيم.
    1- دستوراي اكشن اسكريپت از بالا به پايين و از چپ به راست اجرا ميشن. يعني ابتدا خط اول از چپ به راست تا آخر سپس خط دوم از چپ به راست تا آخر و بعد خط سوم...
    2- در حالت استاندارد در زبان اكشن اسكريپت هر دستور در هر خط به يك سيمي كالن (;) خطم ميشه.
    3- دستور trace : يه دستوريه كه وقتي كدمون رو مي نويسيم (نه موقع اجرا!) بتونيم يه سري چيزا رو تست كنيم مثلا مقدار متغيرامون رو. اينا رو يادتون باشه كه تا آخر درسا ازشوم استفاده مي كنيم.

    1- متغيرها و انواع داده (Variables and Data Types) :
    به صورت ساده متغيرها جعبه هايي هستند كه ما داده ها و يا اطلاعاتمون رو توي اونا ذخيره مي كنيم تا بتونيم بعدا ازشون استفاده كنيم. براي مثال شما مي خواين توي يه سايت اينترنتي username ها و password هاتون رو ذخيره كنين. شما ميتونيد اونا رو توي يه سري متغير ذخيره كنيد. براي ساختن يه متغير فقط كافيه شما براي اون يه اسم منحصر به فرد در نظر بگيريد تا از ساير متغيرهاي برنامه تون متمايز باشه. بعد از ايجاد اون شما مي تونيد بهش مقدار بدين براي مثال دستور زير مقدار 1 رو به myVariable اختصاص ميده:
    myVariable = 1;​
    نكته 1 : براي نامگذاري متغيير بهتره كه نامي متناسب با كاركردي كه دارن بهشون اختصاص بديم مثلا اگه مي خوايم يه پسورد توشون ذخيره كنيم مي تونيم براشون اسم pass يا password رو انتخاب كنيم.
    نكته 2: نامگذاري متغيرها در بعضي موارد محدوديت داره مثلا نمي تونيم نام يه متغير رو با عدد آغاز كنيم يا نمي تونيم براي نام گذاري اونا از كلمات كليدي خود زبان استفاده كنيم. اگه هر كدوم از اين اشتباهات رو مرتكب بشين actionScript شما رو اگاه خواهد كرد و اجازه اين كار رو بهتون نخواهد داد.
    وقتي كه ما مي خوايم براي اولين بار از يك متغير تو برناممون استفاده كنيم بايد اون رو با كلمه كليدي var اعلان كنيم. همچنين براي اعلان متغير در بار اول بايد نوع ديتايي(اطلاعاتي) كه مي خوايم تو متغير ذخيره بشه رو مشخص كنيم براي مثال دستور زير براي اولين بار يك متغير از نوع عددي (انواع متغير رو در ادامه توضيح خواهيم داد) با اسم myVariable اعلان مي كنه:
    [​IMG]
    ! همونطور كه مي بينيد اديتور فلش كلمات كليدي زبان اكشن اسكريپت رو به صورت رنگي در مياره.

    بعضي از انواع داده در جدول زير اومدن:
    [​IMG]
    همچنين انواع ديگه اي از متغير ها هم وجود دارن كه بوسيله كلاسي كه مي خوايم استفاده كنيم تعريف ميشن كه در ادمه توضيح خواهيم داد.
    (مثلا دستور روبرو از كلاس MovieClip ّراي ساختن يه MovieClip در زمان اجرا استفاده مي كنه )
    [​IMG]
    اين كه 'گفتم براي مثال بود. لازم نيست نگران باشيد! در ادامه درسها بيشتر در موردش صحبت خواهيم كرد.

    2 - عبارات شرطي(conditionals) :
    بعضي مواقع ممكنه كه كد ما نياز به تصميم گيري داشته باشيه. يعني در صورت وجود يه شرايطي يه كارايي رو انجام بده.
    عبارات شرطي بر دو نوع هستند if و switch .
    if
    به همراه اين كلمه كليدي يك جفت پرانتز مياد . در صورتيكه عبارت داخل اين پرانتز true (صحيح) باشه دستوراتي كه در حدفاصل دو آكولاد بعد از پرانتزها هستند اجرا ميشن در غير اينصورت اين دستورات اجرا نميشن و برنامه اونا رو ناديده مي گيره.
    بهتره با يه مثال واضح تر توضيح بديم:
    [​IMG]
    خوب در دستورات بالا ابتدا يه متغير از با نام a از نوع عدد در نظر مي گيريم و مقدار 1 رو بهش اختصاص ميديم. بعد b رو در نظر ميگيريم از نوع رشته (مقدار دهي به متغيرهاي رشته با دوتا آكولاد صورت مي گيره) و مقدار hello رو بهش اختصاص ميديم. و متغير سومي رو هم از نوع بولي در نظر مي گيريم و مقدار true رو بهش اختصاص ميديم.
    در خط بعد مي گيم اگه مقدار a ّبرابر با 1 بود اونوقت در پنجره خروجي (trace) بنويس optional a. توجه داشته باشيد اينجام چون مي خواستيم رشته چاپ كنيم اون رو داخل " " گذاشتيم.

    شايد در مورد عبارت داخل پرانتز براتون سوال پيش بياد كه چرا از == استفاده كرديم؟
    جواب: هر موقعي كه بخوايم دو عبارت رو از نظر تساوي نسبت به هم اعتبارسنجي كنيم از اين عبارت استفاده مي كنيم. واضح تر بگم اگه بخوايم يه مقداري رو به يه متغير نسبت بديم از = استفاده مي كنيم مثلا a=1 يعني 1 رو بريز تو متغير a. اما a==1 يعني اينكه "آيا a مساوي 1 است؟" پس عبارت دوم هميشه مقدار "بله هست" (true) و يا "خير نيست"(false) رو بر مي گردونه.
    همچنين عبارات مقايسه اي ديگه هم با معنيشون در پايين اومدن:
    "a>b" = آيا a بزرگتر از است؟
    "a<b" = آيا a كوچكتر از است؟
    "a>=b" = آيا a بزرگتر يا مساوي از است؟
    "a<=b" = آيا a بزرگتر يا مساوي از است؟

    علاوه بر عبارات مقايسه اي عبارات منطقي رو هم داريم كه در پايين توضيح مي ديم و يه مثال هم مي زنيم:

    عملگر "&&": معني "و" تو زبان فارسي رو مي ده و اسمش هست AND.
    عملگر "||" : معني "يا" تو زبان فارسي رو مي ده و بهش ميگن OR.
    عملگر "!": معني "نچ" . فارسي رو مي ده و صداش مي زنن NOT.:lol:

    مثال زير همه چيز رو مشخص مي كنه:
    [​IMG]
    توضيح : كد داره ميگه كه اگه مقدار متغير a برابر 1 بود و مقدار b برابر با goodbye بود. در پنجره trace چاپ كن  options a and b.
    با توجه به مقدار متغير ها كه تو كد قبلي داشتيم چون مقدار b ّرابر با hello بود اينجا هر دوتا شرط برقرار نيست پس عبارات داخل آكولاد اجرا نميشه و چيزي در پنجره trace چاپ نمي شه. نكته: در عملگرAND هر دو عبارت چپ و راست اون بايد برقرار باشن يا به عبارتي مقدار true داشته باشن.
    مثال بعدي :
    [​IMG]
    در اين مثال در صورتي دستورات داخل آكولاد اجرا ميشه كه طرف راست يا طرف چپ عبارت برقرار باشه . به عبارت ديگه يكي از دوعبارت يا هر دو عبارت دو طرف عملگر || برقرار باشن. پس در اين مثال عبارت options a and b در پجره trace چاپ ميشه. چو اگرچه عبارت b برقرار نيست ولي همونكه a برقراره كافيه

    مثال بعدي:
    [​IMG]
    در اين مثال ميگه كه اگر true ، c نبود چاپ كن not option c . چون در بالا false ، c اعلان شده بود شرط برقرار است اين عبارت چاپ مي شه.

    فكر كنم برا اين جلسه ديگه بسه! در جلسه بعدي در مورد if بيشتر توضيح مي ديم و اگه مجالي بود switch رو هم توضيح مي ديم.

    پانوشت: اگه درس خسته كننده به نظر مياد كاملا يه امر عاديه. اينا مسائل مقدماتيه هر زبان برنامه نويسيه كه بايد خوب ياد گرفته بشن. چند تا درس ديگه كه بگذره كاملا وارد كدنويسي ميشيم و ديگه درسا خسته كننده نخواهند بود 
     
    آخرین ویرایش: ‏29 ژانویه 2009
    نوشته شده توسط sizanjavad در ‏29 ژانویه 2009
    majid_jaki، farzandanerooz، javad3d و 60 نفر دیگر از این ارسال تشکر کرده اند.
  5. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس چهارم

    بسم الله الرحمن الرحيم
    جلسه قبل رو با بحث نيمه كاره if تموم كرده بوديم بنابر اين با همين مبحث اين جلسه رو شروع مي كنيم.
    خوب در جلسه قبل گفته بوديم كه براي گذاشتن شرط رو دستور العمل هامون از كلمه كليدي if استفاده مي كنيم و چندتا مثال هم در رابطه با اون گفتيم. حالا فرض كنيم كه مي خوايم به كامپوتر بگيم "اگه اين شرط برقرار بود اين كار رو بكن وگرنه كار دوم رو انجام بده" . قسمت اول رو كه در جلسه قبلي گفتيم با if انجام ميشه قسمت دوم رو با كلمه كليدي else انجام ميديم. else بلافاصله بعد از آكولاد بسته ي if مياد و بعد از خودش آكولاد رو باز مي كنه و دستورات مربوط به خودش رو در محدوده دوتا آكولاد باز و بسته قرار ميده. قطعه كد زير همه چيز رو مشخص مي كنه
    [​IMG]

    خط اول ميگه كه اگه a برابر با 1 نبود چاپ كن "a doesnot equal 1" و خط سوم ميگه در غير اينصورت( يعني در صورتيكه a برابر با 1 بود) چاپ كن "a does equal 1".

    تا اينجا تونستيم كه توسط دستور if و متعلقات اون دو تا شرط رو چك كنيم و بنا به شرايط كار خاصي رو كه مدنظرمون هست انجام بديم. حالا اگه بخوايم بيش از 2 تا شرط رو چك كنيم چي؟ مثلا بخوايم به كامپيوتر بفهمونيم كه اگه شرط 1 برقرار بود كار يك رو انجام بده، اگه شرط 2 برقرار بود كار 2 رو انجام بده، اگه شرط 3 برقرار بود كار 3 رو انجام بده و .... اينجاست كه از كلمه كليدي elseif براي حل مشكلمون كمك مي گيريم.
    مثال زير رو ببينيد:
    [​IMG]
    كد بالا در خط اول و دوم به كامپوتر مي گه كه اگه a برابر با 1 بود چاپ كن "option a" و اگر مقدار b برابر با hello بود چاپ كن "option b" و در غير اينصورت( يعني در صورتي كه هر كدوم از دوتا حالت بالا برقرار نباشه) چاپ كن "Option other".

    در مورد بحث if به مقدار مقدماتي فكر مي كنم كافي باشه. در درس هاي آينده و مثالهاي اونا كاملا با كاربردها و تكنيك هاي if و هيات همراه :D آشنا خواهيم شد.

    switch

    switch در حقيقت كار كل if و هيات همراهش(elseif و else) رو با هم انجام ميده. به صورتي كه يك متغير رو در نظر مي گيره و در داخل خودش تمامي شرط ها رو يك به يك چك مي كنه و در صورت برقراري هر شرط كار مربوط به اون رو انجام ميده.
    switch داخل خودش سه تا كلمه كليدي داره:
    1) كلمه كليدي case : اين كلمه در حقيقت كار چك كردن شرط ها رو انجام ميده(كاربردي شبيه elseif)
    2) كلمه كليدي break : اين كلمه هم حد فاصل اجراي دستورات رو مشخص ميكنه يعني دستورات پتيين اون اجرا نمي شن!!!
    3) كلمه كليدي default: كارايي شبيه به else داره. يعني هر شرطي غير از شروط بالايي برقرار باشه.

    مثال زير همه چيز رو روشن مي كنه:
    [​IMG]
    كد با كلمه كليدي switch شروع ميشه و a داخل آكولاد نشون مي ده كه مي خوايم شرطاي اتفاق افتاده رويa رو بررسي كنيم
    در خط دوم داريم :case 1 يعني اگر a باشه (توجه كنيد كه انتهاي هر case بايد : بياد) خط بعد ميگه چاپ كن "one" و break ميگه كه وقتي case 1 برقرار بود دستوراتي كه تا بالاي سر من نوشته شده رو اجرا كن. توجه: اگه اين break رو نذاريم دستورات تا break بعدي اجرا مي شن.
    بقيه case ها هم همينطور ادامه دارن و به ترتيب گفته شده كار خودشون رو مي كنن!
    default هم ميگه كه اگه هيچ كدوم از case هاي بالايي برقرار نبودن بنويس "other" . و با آكولاد switch ما تموم ميشه.

    در جلسه بعدي ساختار هاي تكرار شونده يا حلقه اي رو توضيح خواهيم داد.
     
    آخرین ویرایش: ‏8 فوریه 2009
    نوشته شده توسط sizanjavad در ‏3 فوریه 2009
    majid_jaki، javad3d، fafijoon و 57 نفر دیگر از این ارسال تشکر کرده اند.
  6. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس پنجم

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

    همونطور كه قول داده بوديم اين جلسه حلقه هاي تكرار (loop) ها رو توضيح مي ديم.
    با ذكر يه مثال بحث رو شروع مي كنيم.فرض كنيد شما تو يه پروژه برنامه نويسي مجبور ميشين يه كار ثابت رو چندين بار پشت سر هم انجام بدين. مثلا كد شما بايد يه ليست 20 نفره رو بررسي كنه و يه اسم خاص رو تو اون پيدا كنه. براي اينكار كد شما بايد 20 بار عمل چك كردن اسم رو انجام بده. خوب اولين راهي كه به ذهنمون ميرسه اينه كه به كامپوتر بگيم:
    PHP:
    "اسم اول رو چك كن اگر برابر بود چاپ كن"
    "اسم دوم رو چك كن اگر برابر بود چاپ كن"
    "اسم  سوم رو چك كن اگر برابر بود چاپ كن"
    .
    .
    .
    "اسم بيستم رو چك كن اگر برابر بود چاپ كن"  
    اين دقيقا همون كاري بود كه من در ابتداي آشنايي با دنياي كامپوتر موقع كدنويسي انجام ميدادم:D. البته با زبان qbasic يادش به خير...:rose:
    شايد براي 20 بار كار ساده اي باشه ولي حالا فرض كنيد همين عمل بايد 10000 بار انجام بشه. پس با اين حساب شما بايد براي همين كار ساده 10000 خط كد بنويسيد.
    خوب اينجاست كه مي تونيم قبول كنيم دستوري براي انجام اين كار بايد وجود داشته باشه. اينچنين كارهايي رو حلقه هاي تكرار يا به عبارت كامپوتري loop ها انجام مي دن.

    حلقه هاي تكرار بر دو نوع هستند:
    1- حلقه تكرار for
    2- حلقه تكرار while


    حلقه تكرار for :

    حلقه for كارهايي رو كه بهش مربوط ميشه رو براي تعداد مشخصي دفعه انجام ميده. يعني برنامه نويس خودش براي for مشخص مي كنه كه چند بار كار مربوط به خودش رو انجام بده.
    براي معرفي for و ساختار اون مثال زير رو پيگيري مي كنيم.
    [​IMG]
    در مثالي كه بيان مي كنيم قصد داريم عبارت hello رو 3 بار چاپ كنيم. اولين كاري كه مي كنيم نوشتن كلمه كليدي for هست. بعد از اون شرايط رو بايد براي for مشخص كنيم. شرايط رو در داخل يك جفت پرانتز باز و بسته براي for بيان مي كنيم . براي اينكه به for بفهمونيم كه بايد 3 بار كارش رو انجام بده از يه متغير استفاده مي كنيم. در ابتدا به متغير مقدار 0 رو اختصاص ميديم( در اصلاح اون رو initialize) مي كنيم(ما در اين مثال متغير i رو با مقدار صفر و از نوع Number در نظر گرفتيم). بعد مقدار انتهايي رو براي اون مشخص مي كنيم(بعد از ; ) در اين مثال ميگيم تا موقعي كه i<3 باشه كارت رو تكرار كن. پس با اين حساب كار ما 3 بار انجام خواهد شد( به ازاي i=0 ,i=1 ,i=2) . در قسمت بعدي (بعد از ; ) داريم ++i اين عبارت يعني در هر مرحله يكي به مقدار i اضافه كن.
    با اين حساب در مرحله اول i=0 هست for مياد كاراي خودش رو (كاراي بين دو تا آكولاد باز و بسته) انجام ميده. بعد از اون مقدار i رو بررسي ميكنه ميبينه i=0 هست پس هنور از 3 كوچيكتره بنابراين كارش رو ادامه ميده يكي به مقدار i اضافه ميكنه و مقدار i رو مي كنه 1. دوباره كارها رو انجام ميده و مقدار i رو چك ميكنه . مقدار i ،يك هست پس هنوز از 3 كوچيكتره بنابراين بازم يكي به مقدار i اضافه ميكنه و i رو برابر با 2 ميكنه. بازم كارها رو انجام ميده و بازم ميبينه كه مقدار i ، 2 هست پس هنوز از 3 كوچيكتر هست پس بازم يكي به مقدار i اضافه مي كنه و كارها رو انجام ميده ، اينبار كه مقدار i رو چك ميكنه مي بينه كه i=3 شده پس ديگه i<3 برقرار نيست و كار for تموم ميشه و خط اجرا به بعد از آكولاد بسته for منتقل ميشه .
     
    چند نكته:
    1- به جاي ++i مي تونيم بنويسيم i+=1 . اگر بخوايم مقدار i دوتا دوتا اضافه بشه مي نويسيم i+=2 و...
    2- معموله كه تو حلقه هاي شمارنده متغير شمارنده رو i در نظر مي گيرن.(اجبار نيست!!!)
    3- امكان برعكس شمردن هم وجود داره. يعني به جاي اينكه به i اضافه كنيم از اون كم كنيم.(--i)
    [​IMG]
    از حلقه for مطمئنا در درسهاي آينده بيشتر استفاده خواهيم كرد. حلقه هاي تكرار از جزئهاي اساسي برنامه هاي كامپوتري هستند.

    پانوشت: راستي تا حالا نگفتيم اين كدها رو كجا مينويسيم. چون از اين به بعد در مثالها لازمه كه خروجي رو خودمون چك كنيم لازمه كه كدها رو تو اديتور فلش وارد كنيم.
    براي اينكار شما برنامه فلش رو كه باز مي كنين(فلش 8 بعد) در قسمت create new گزينه اول( flash file (Action script3 . انتخاب و روي فريم اول كليك راست كنيد و گزينه action رو انتخاب كنيد و كدها رو در اديتوري كه ظاهر ميشه بنويسيد.
    براي ديدن نتيجه كدهاتون هم ctrl+Enter رو بزنيد يا از control گزينه test Movie رو انتخاب كنيد. در آينده در مورد اعمال كد به اجزاي ديگه هم بحث خواهيم كرد.

    در جلسه بعدي در مورد حلقه ي تكرار while خواهيم گفت.
     
    آخرین ویرایش: ‏8 فوریه 2009
    نوشته شده توسط sizanjavad در ‏8 فوریه 2009
    majid_jaki، javad3d، LiveTime و 51 نفر دیگر از این ارسال تشکر کرده اند.
  7. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس ششم

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

    بحث جلسه قبل رو تا حلقه تكرار for ادامه داديم. اگه يه مروري روي بحث قبل داشته باشيم متوجه مي شيم كه حلقه For يه حلقه ي كرانداره يعني ما مي دونيم كه چند بار اين حلقه تكرار خواهد شد. يعني اين خودمون هستيم كه براش انتها مشخص مي كنيم. ولي امكان داره بعضي از حلقه ها وجود داشته باشن كه ما ندونيم چندبار بايد تكرار بشن. يعني حلقه هايي كه اونقدر تكرار مي شن تا خواسته يا خواسته هاي يه شرطي رو برآورده كنن.

    حلقه تكرار while

    براي مثال فرض كنيد قصد داريد يه بازي شانس طراحي كنيد كه تو اون اعدادي به صورت تصادفي توسط كامپيوتر توليد مي شن و به بازيكنا داده ميشن ، اگه عددي كه براي يه بازيكن انتخاب مي شه از 0.5 بزرگتر باشه اون بازيكن بازندست.

    اول از همه بايد از كامپوتر بخوايم كه براي ما يه عدد تصادفي توليد كنه. اين كار تو اكشن اسكريپت با تابع random انجام ميشه ( مثل خيلي از زباناي برنامه نويسي ديگه).
    نكته: از اين به بعد تو مثالهامون گهگاهي توابع زبان اكشن اسكريپت رو هم معرفي مي كنيم. البته نه همشون رو!!! تا جايي كه امكان داشته باشه توضيحشون ميدم ولي براي اطلاعات بيشتر مي تونين از بهترين منبع يعني help خود برنامه فلش استفاده كنيد.
    خوب، گفتيم از تابع ()random (فعلا بدونين كه جلوي توابع از پرانتز چه خالي، چه پر، استفاده خواهيم كرد تا دو جلسه ديگه كه تابع ها رو توضيح بديم) استفاده مي كنيم براي توليد اعداد تصادفي. تابع random يه عدد تصادفي بين 0 تا 1 توليد مي كنه.
    همونطور كه شرط كرده بوديم عدد ما بايد از 0.5 كوچيكتر باشه . امكان داره كامپوتر اولين عددي كه توليد مي كنه تو محدوده 0 تا نيم نباشه(يعني از 0.5 تا 1 باشه) ، يا اينكه اولي تو محدوه صفر تا 0.5 باشه ولي دومي نباشه يا شايدم نه ، اولي و دومي تو محدوه صفر تا 0.5 باشن ولي سومي نباشه و بازم شايد اولي و دومي و ... تو محدوه صفر تا 0.5 باشن ولي n امي نباشه. پس كامپوتر بايد اونقدر عدد توليد كنه تا برسه به يه عددي بزگتر از 0.5. خوب ! اينجا مي دونيم كه بايد پاي يه حلقه تكرار وسط باشه ولي نمي دونيم اين حلقه چند بار قراره دور بزنه! يه بار؟ دو بار ؟ يا خيلي هزار بار؟:D
    اينجاست كه حلقه تكرار while به دادمون مي رسه.
    به كد زير توجه كنيد.
    [​IMG]

    خوب، خط اول كه معلومه يه متغير به نام num از جنس Number (عددي) توليد و عدد 0 رو به عنوان مقدار اوليه به اون اختصاص ميده ( به اصلاح اون رو initialize) ميكنه. در خط بعد به كامپيوتر ميگيم تا موقعي كه num كوچكتر از 0.5 هست كاراي محدوده كروشه باز و بسته رو انجام بده. در بار اول كه مقدار num صفره در دفعات بعدي هم كه اعداد ما بوسيله تابع random توليد ميشن و اگه كوچيكتر از نيم بودن بالتبع حلقه همينطور دور مي زنه تا عدد توليدي توسط random از 0.5 بزرگتر بشه.

    نكته : تابع ()random يكي از تابع هاي كلاس math هست. كلاس math حاوي يه سري توابع براي كارهاي و عمليات رياضي هست . در مورد كلاس ها در درس هاي آينده بحث خواهيم كرد. فعلا در همين حد بدونين كه براي استفاده از تابع random بايد قبلش يه .math بياد تا بعدا ببينيم چي ميشه.

    در مورد while يه نكته خيلي مهم وجود داره و اون اينكه هميشه حواسمون باشه كه اگه شرط داخل پزانتز هميشه برقرار باشه يعني هيچ وقت نقض نشه برنامه ما تا ابدالدهر در حالت اجرا خواهد موند. و كامپوتر شما در هنگام اجراي برنامه لاجرم هنگ خواهد نمود مثل اين بابا :shock:
    حالا اگه خامي كرديد و اين اتفاق براتون افتاد يه وقت دستپاچه نشيد. خونسرد باشين ، خود موتور اجراي فلش يا همون avm اونقدر باشعور هست كه بعد از يه مدت كه ببينه كارش داره سنگين ميشه ، ميفهمه كه شما سوتي دادين و كار رو خودش متوقف مي كنه ولي طبيعيه كه هدف شما مبني بر اجراي اون كاري كه مدنظرتون بوده يحتمل به ثمر نخواهد نشست. ( البته معمولا زباناي برنامه نويسي ديگه در اينجور موارد با ctrl+break متوقف ميشن)

    يه نمونه از اين حلقه هاي بي پايان در زير اومده:
    [​IMG]

    همونطور كه ميبينيم متغير flag از جنسي بولي با مقدار اوليه true تعريف ميشه و در خط بعد ميگه تا موقعي كه flag مقدارش true هست چاپ كن infinite loop . و چون مقدار flag هيچ جايي تغيير نمي كنه و براي هميشه true خواهد بود حلقه تا بي نهايت تكرار ميشه.
    نكته: در قسمت شرط while فقط اسم متغير آورده شده. اگر به تنهايي اين اسم آورده بشه يعني تا موقعي كه متغير true بود ولي اگه بخوايم عكس اين قضيه اتفاق بيفته بايد حتما اعلام كنيم flag=false يعني براي false بايد حتما و به طور صريح اعلام كنيم ولي براي true الزامي نيست. يه راه ديگم استفاده از صفر و 1 هست. صفر به معني false و1 به معناي true.

    بازم نكته: استفاده بيجا از حلقه (چه for چه while) ممنوع ميباشد. چون كامپيوتر تمام كاراش رو رها ميكنه تا كار حلقه تموم بشه و اگه از حلقه به طور بيجا و نامناسب استفاده بشه بيخود برنامه رو سنگين كرديم و به عبارت فني سربار زمان اجرا ايجاد كرده ايم.

    جلسه بعد رو با بحث آرايه ها(Arrays ) در اكشن اسكريپت ادامه خواهيم داد.
     
    آخرین ویرایش: ‏11 فوریه 2009
    نوشته شده توسط sizanjavad در ‏11 فوریه 2009
    ghatadpushuge، majid_jaki، javad3d و 46 نفر دیگر از این ارسال تشکر کرده اند.
  8. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس هفتم

    در ادمه بحثمون پيرامون برنامه نويسي با actionscript مي رسيم به مبحث مهم و شيرين :) آرايه ها. كه از مفاهيم پايه اي هر زبان برنامه نويسي هستد.
    اگه يادتون باشه در جلسات قبلي (درس سوم) در مورد متغير ها و انواع اونا صحبت كرديم. و گفتيم متغيرا مي تونن مقداري رو داخل خودشون ذخيره كنن. ولي مي دونيم كه متغيرا فقط قابليت ذخيره يك مقدار رو در خوشون دارن. يعني يك قطعه داده در هر متغير. خوب براي برنامه هاي ساده شايد شما به چيزي بيش از اين هم احتياجي نداشته باشين ولي كم كم و در برنامه هاي بزرگتر با انبوهي از داده ها مواجه مي شين كه امكان ذخيره اونا به صورت تك تك در متغيرها دشوار و در مواردي غير ممكن خواهد شد. اينجاست كه دست به دامن آرايه ها مي شيم تا علاوه بر راحت شدن كارمون بتونيم قطعات داده رو هم دسته بندي كنيم.
    فكر كنيد شما مي خواين 50 تا داده رو ذخيره كنين. يه راهش اينه كه 50 تا متغير رو تعريف كنين و داده ها رو تك تك تو اونا ذخيره كنين و راه دوم و عقلاني اون هم استفاده از آرايه هاست كه به راحتي مي تونيم روي عناصر اونا حركت كنيم ، اونا رو بررسي كنيم ، به ابتدا و انتهاي اونا عضو اضافه كنيم و خيلي كاراي ديگه
    خوب اولين كاري كه بايد انجام بديم اينه كه آرايه رو تعريف كنيم و به برنامه بشناسونيم. به دو روش اين كار امكانپذيره:
    1- روش عادي مثل تعريف متغير كه نوع رو Array انتخاب كنيم.(البته اينم يه نوع استفاده از كلاسه بعدا مي فهميد:wink:)
    2- استفاده از كلاس array و ايجاد يك شي خالي از آرايه. (بازم يادآور مي شم كه مبحث كلاسها و مفاهيمش رو در آينده به طور كامل توضيح خواهيم داد.)
    دو نوع تعرف رو در زير ميبينيد. كه خط اول در مورد روش اول و خط دوم هم براي روش دوم هست.
    [​IMG]

    در خط اول آرايه با نام myArray تعريف شده و مقادير اوليه 1 و 2 و 3 به اون اختصاص داده ميشن.(initialize ميشن)
    در خط دوم هم يه شي خالي با نام myArray از كلاس Array ساخته ميشه.

    نكته 1: در مورد اسم گذاري متغيرها طبق يه قرارداد اگه اسم از دو كلمه تشكيل بشه به دو صورت رسمي انجام مي گيره. يا حرف اول كلمه دوم بزرگ نوشته ميشه (مثل اينجا كه Array با حرف بزرگ شروع شده) و يا كلمه دوم با يه _(آندرلاين) از كلمه اول جدا ميشه. يادتون باشه اين كار بين برنامه نويسا مرسومه، الزامي نيست!!! در آينده خواهيد ديد كه شكل اول در مورد كلمات كليدي فلش رعايت شده. اينجوري شما راحتت تر كلمات كليدي دوبخشي رو حفظ مي كنيد. 

    نكته 2: همونطور كه مي بينيد مقدار دادن به آرايه به اينصورته كه يه براكت باز ميشه و اعدادي كه بايد به عنوان محتواي آرايه در نظر گرفته بشن با ويرگول از هم جدا ميشن.

    نكته 3: برچسب گذاري اعضاي آرايه توسط خود زبان از صفر شروع ميشه. يعني برچسب اولين عضو 0 و برچسب دومين عضو 1 و به همين صورت ادامه داره. از برچسب ها براي دسترسي به اعضاي آرايه استفاده مي كنيم. مثلا مثال زير عضو اول آرايه رو برامون چاپ مي كنه يعني عدد 1 رو.
    [​IMG]

    خوب يه مثال هم از روش دوم مي زنيم تا با اون هم آشنا باشيم. استفاده از روش دوم بهتر و اصولي تره. چون مي تونيم از امكانات و توابع آماده كلاس Array استفاده كنيم
    در مثال زير از دوتابع ويژه اين كلاس استفاده شده. (البته به اينا مي گن متد كه در مبحث كلاسا باهاشون آشنا خواهيم شد) . تابع () push يه عضو به انتهاي آرايه اضافه مي كنه و تابع () pop يه عضو از ته آرايه بر مي داره.
    نكته : اگه مي خواين در مورد ()push و ()pop بيشتر بدونيد كافيه كلمه stack رو تو گوگل يه سرچ كنين.
    [​IMG]

    در خط اول يه شي به نام myArray از كلاس Array ساخته مي شه. خط دوم عدد يك رو توسط push به انتهاي آرايه (كه الان خاليه و ميشه خونه اول) اضافه مي كنه و در خط هفتم هم عدد 2 كه آخرين عضو آرايه هست چاپ مي شه. يادتون باشه اينجا علاوه بر چاپ شدن عنصر آخر برداشته هم ميشه. در مورد بقيه خطها هم ديگه توضيح نميدم . اگه آموزش ها رو تا اينجا دنبال كرده باشين مطمئنا خودتون متوجه مي شين.

    نكته : براي اينكه تو قطعه كدمون توضيحات بذاريم تا بعدا راحت تر متوجه بشيم يا بقيه راحت تر بفهمنش ابتداي خط دوتا اسلش(//) مي زاريم و تو اون خط هر توضيحي كه خواستيم مي ذاريم تا كامپايلر(كامپايلر چيست؟ رجوع كنيد به درس دوم) بهش كاري نداشته باشه و ترجمش نكنه. اگه بخوايم چند خط توضيح بذاريم در ابتداي خط اول (*/) و در انتهاي خط آخر توضيحاتمون (/*) مي ذاريم.

    مثال زير هم در مورد استفاده رشته ها در آرايه هست.
    [​IMG]

    در اين برنامه e را به عنوان خروجي خواهيم ديد. در ضمن طول رشته ها هر مقداري مي تونه باشه. مثلا عضو اول آرايه باش "amir" و عضو دوم باشه "mohammad javad" و ...

    فكر مي كنم براي آرايه ها فعلا همينقدر كافي باشه. اگه وقت كنم يه فايل اتچ هم قرار مي دم تا متدهاي مهمي مثل sort و length و ... رو توش معرفي كنم. تو درس نمي آرمشون چون هنوز به مبحث كلاسها نرسيديم. همينقدر هم كه گفتم فكر كنم زياده روي كردم.
    براي جلسه بعد تابع ها (functions) رو توضيح خواهم داد.
     

    پیوست ها:

    • array.zip
      اندازه فایل:
      کیلوبایت 4.9
      نمایش ها:
      665
    آخرین ویرایش: ‏19 فوریه 2009
    نوشته شده توسط sizanjavad در ‏15 فوریه 2009
    majid_jaki، javad3d، alone_ace و 46 نفر دیگر از این ارسال تشکر کرده اند.
  9. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس هشتم

    در ادامه درسهاي اكشن اسكريپت به بحث مهم توابع مي رسيم. فكر مي كنم يك دو جلسه ديگه بحث مفاهيم بنيادي رو تموم كنيم و انشاء الله با كدنويسي و جزئيات actionscript بيشتر و دقيقتر درگير بشيم

    توابع (functions):

    اندر فوايد توابع:

    تا اينجا كه برنامه نويسي رو شروع كرديم كدهامون رو خط به خط مي نوشتيم و از بالا به پايين حركت مي كرديم. يعني اگه فرض كنيم يه فلش جلوي خط اول برناممون باشه با اجرا شدن برنامه فلشه شروع به حركت مي كردو خط به خط به سمت پايين حركت مي كرد تا به انتهاي برنامه برسه. ولي با مطرح شدن بحث توابع، اين فلش يه كم بايد تحركش رو بيشتر كنه و به جاي اينكه خط به خط به سمت پايين حركت كنه گاهي اوقات از روي چندين خط پرش كنه و يه سري خط رو پشت سر هر پيمايش كنه و دوباره بپره سر جاي خودش ( يعني همون چندين خط قبل) و همينطور ادامه بده و و ادامه بده و ادامه بده و... درسته كه با اين استراتژي آقا فلش ما مجبور ميشه يه روند نامنظمي رو طي كنه ،ولي اينكارش چندين سود داره: يكي اينكه كدهاي ما خواناتر ميشن و ديگر اينكه ما از كدهامون مي تونيم تو برنامه هاي ديگه هم استفاده كنيم، ديگري اينكه اشكال يابي (debuging) برنامه ما راحت تر ميشه و مهم تر از همه تحرك بيشتر براي تناسب اندامش خيلي خوبه:lol:

    توجه: اگه از متن بالا چيزي سر در نياورديد پس از خوندن تمام مطالب اين درس يه بار خطوط بالا رو مرور كنيد. مطمئنا اينبار براي شما مفيد فايده واقع خواهند شد

    توابع بر دودسته اند:
    1- توابعي كه ما خودمون مي نويسيم
    2- توابع از پيش نوشته شده اي كه خود زبان در اختيار ما قرار ميده . مثل توابع پركاربرد و عمومي مثل تابع محاسبه cos يا محاسبه sin يا توابع كار با رشته ها و خيلي توابع ديگه . هرچه برنامه نويس توابع يه زبان رو بيشتر و بهتر بشناسه قاعدتا دستش براي نوشتن كدهاي بهتر باز تره. در طول درسهاي آينده با توابعي كه براي مثالهامون بهشون نياز خواهيم داشت آشنا خواهيم شد ولي يادگيري تمامي توابع اين زبان فقط و فقط به كوشش و تحقيق بيشتر خودتون بستگي داره. يه منبع خيلي خوب براي يادگيري و آشنا شدن با اونا سيستم help خود برنامه فلاشه. 

    در اين درس ما نوشتن دستي توابع توسط خود برنامه نويس رو ياد مي گيريم و به مورد دوم كاري نداريم.
    توابع در action script با كلمه كليدي function معرفي مي شن و مي تونن ورودي يا خروجي داشته باشن يا اصلا هيچ كدوم رو نداشته باشن.
    توابع در حقيقت كدهاي ما رو در بلاكهايي دسته بندي مي كنن و هرموقع كه بهشون نياز داشته باشيم اونا رو اجرا مي كنيم.
    براي مثال قطعه كد زير تابعيه كه عبارت hello رو در خروجي نشون مي ده.
    [​IMG]

    خط اول با عبارت كليدي function شروع ميشه و بعد از اون اسم تابع مياد و بعد از اون يه جفت پرانتز كه ورودي تابع بين اونا قرار مي گيره. چون تابع ما ورودي نداره جفت پرانتز رو خالي مي ذاريم. بعد از پرانتز دوم يه بلاك باز مي كنيم و محتويات تابع رو بين دو جفت كروشه قرار مي گيره.
    در اينجا تنها كاري كه تابع ما مي كنه همانا چاپ عبارت hello است:cool:
    حالا كارمون كه با تابع تموم شد ، نبايد به امون خدا ولش كنيم ، بلكه بايد در موقع نياز اون رو صدا بزنيم. صدا زدن تابع هم فقط با اسمش انجام مي گيره. چون در اين مثال تابع ما ورودي نداره مثل خود تابع جفت پرانتز صدازننده اون هم خالي از عبارت خواهد بود. در خط آخر اين كد ، تابع رو صدا زديم. اين صدا زننده هر جاي برنامه مي تونه باشه.
    تمرين: جلوي خط آخر // بذارين تا اين خط موقع كامپايل ترجمه نشه. چه نتيجه اي مي گيريد؟

    مثال بالا ساده ترين كابرد يه تابع بود. در مثال بعدي يه مرحله جلوتر مي ريم تا تابعمون يه مقدار بيشتر به مخش فشار بياره:D در مثال بعدي براي تابعمون ورودي تعريف مي كنيم. مثال رو ببينيد تا توضيحاتش رو ذكر كنيم
    [​IMG]

    مثال شبيه مثال قبليه با اين فرق كه در خط اول تعريف تابع ما يه متغير تعريف مي كنيم به نام msg و از نوع string( رشته). هر ورودي كه براي تابع مي فرستيم در بدنه تابع با نام msg شناخته مي شه. نكته مهم اينكه چون ما در تعريف تابع ورودي رو از جنس رشته تعريف كرديم موقع ارسال آرگومان(ورودي تابع) به تابع هم بايد يه رشته براي تابع بفرستيم در غير اينصورت موقع كامپايل با خطا مواجه خواهيم شد.
    نكته: توابع مي تونن بيش از يك ورودي داشته باشن. در ادامه با توابع چند ورودي هم آشنا خواهيم شد. در ضمن اگه تابع ما در تعريف يك ورودي داشته باشه بايد يكي هم براي اون بفرستيم و اگه دو تا بود براش دقيقا دوتا و...

    در خط دوم و در بدنه تابع ميگيم كه msg رو چاپ كن. حالا بستگي داره كه ما چي براي ورودي تابع (msg) فرستاده باشيم. در اينجا ما در موقع صدا زدن تابع goodbye رو براي تابع فرستاديم. پس goodbye چاپ ميشه. حالا شما هرچي كه دلتون مي خواد جاش بذارين! اگه كار نكرد بزنين تو گوش من:snap:


    در مثال سوم مي خوايم يه مرحله جلوتر بريم و براي تابع خروجي هم قرار بديم. يه موقع خروجي رو با خروجي trace كه در مثالاي فبلي داشتيم اشتباه نگيرين!!!
    اين خروجي يعني اينكه تابع يه مقداري رو به برنامه برگردونه و برنامه با اين خروجي هر كاري خواست بكنه. مثلا تابع cos به عنوان وردي 90 درجه رو بگيره و به عنوان خروجي به برنامه 0، (cos 90 =0) رو تحويل بده و برنامه هم از اين نتيجه در محاسباتش استفاده كنه.
    مثال زير يه عدد از نوع number مي گيره و بعد از انجام محاسباتش يه عدد از نوع number تحويل برنامه مي ده.

    [​IMG]

    در خط اول، بعد از پرانتز دوم (بسته) يه دونقطه ميذاريم و نوع خروجي رو مشخص مي كنيم(اينجا number).
    خط بعد با عبارت كليدي return شروع مي شه. در توابعي كه خروجي دارن با اين عبارت مقداري كه بايد به برنامه تحويل داده بشه رو مشخص مي كنيم. مثلا در اينجا چون ما در موقع صدا زدن تابع 20 رو به عنوان ورودي به تابع داديم مقدار برگشتي به برنامه 68 خواهد بود. خودتون محاسبه كنيد به همين نتيجه مي رسيد

    و بالاخره در برنامه آخر يه مقدار اصولي تر، از خروجي استفاده كرديم. يعني اينكه يه متغير تعريف كرده و مقدار خروجي رو توي اون مي ريزيم و بعد از اون متغير استفاده مي كنيم.

    [​IMG]

    نكته 1: خروجي برنامه بالا 20 هست. خودتون هم حساب كنيد.

    نكته 2: در صورتي كه برنامه خروجي نداشته باشه مي تونيم بعد از دو نقطه ي بعد از پرانتز بسته عبارت void رو قرار بديم كه نشانه بدون خروجي بودن تابعه! اينكار برنامه رو خواناتر مي كنه و استاندارد، وگرنه همونطور كه در دو برنامه اول اين درس ديديد نذاشتن اون هم براي توابع بدون خروجي مشكلي ايجاد نمي كنه! براي ورودي ها اگه ورودي نداشتيم در قسمت ورودي تابع هيچي(مثل دو برنامه اول) نمي ذاريم و لازم نيست مثل خروجي void بذاريم. 

    نكته 3: توابع بسيار پركاربرد هستند. و در اكثر مواقع پيچيده تر از اين 4 مثال ما. در درسهاي آينده كم كم با اونا آشنا شده و كاربردشون رو بيشتر و بهتر لمس خواهيم كرد.

    نكته 4: حالا دو مرتبه "اندر فوايد تابع" رو كه در پاراگراف دوم درس اومده بخونين. فكر كنم حال بهتر بتونين باهاش ارتباط برقرار كنيد. اگه بازم نتونستين، اشكالي نداره هنوز يه عالمه درس در آينده داريم كه تو مثالاي اونا از تابع استفاده خواهيم كرد.

    در درس آينده custom object و اگر بتونم كلمه كليدي this رو توضيح خواهم داد.
     
    آخرین ویرایش: ‏26 فوریه 2009
    نوشته شده توسط sizanjavad در ‏26 فوریه 2009
    majid_jaki، javad3d، alone_ace و 44 نفر دیگر از این ارسال تشکر کرده اند.
  10. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش action script درس نهم

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

    به اميد خدا امروز مي خوام ديگه مباحث پايه اي رو تموم كنم. مفاهيمي كه در همه زبانها مشتركه و در زبانهاي مختلف با syntax متفاوت بيان مي شن. تا اينجا سعي كردم كه تمامي مفاهيم رو به صورت ساده بيان كنم و در آينده هم همين قصد رو دارم.
    در هر صورت خودتون هم مي دونين بيان كردن تمام ويژگيها و نكات مقدور نيست! من تا جايي كه برام مقدور بود گفتمشون و به عبارتي سرنخ رو دادم دستتون. ديگه تمرين و تكميل كردن اونا با خودتون.
    براي اين جلسه هم custom object و مفهوم this و شيوه هاي آدرس دهي رو بيان مي كنم و بحث مفاهيم پايه رو تموم مي كنم.
    Custom Objects

    يه مقداري كه با actionscript كار بكنين مي فهمين كه با object ها خيلي سروكار دارين. اكثر هويت هاي مستقل مثل button ها (كليدها) ، MovieCLip ها و ... در حقيقت اشيا (object هايي) از كلاس هاي خودشون هستن. هر شي يه سري ويژگيها (properties) مثل عرض شي ، موقعيت اون تو صفحه نمايش و ... داره و همچنين هر شي يه سري خصيصه هايي (Method) داره. متدها كارايي هستن كه يه شي مي تونه انجام بده. مثلا ماشين مي تونه حركت كنه پس حركت كردن يه متد براي ماشينه.
    و هر شي مي تونه به يه سري رخدادهايي (event) جواب بده مثل كليك ماوس يا فشار يه كليد از صفحه كليد و ... مثلا اگه ماوس كليك شد يه تابعي رو فراخواني كنه.(تابع ها رو هم كه جلسه قبل توضيح داديم).
    نكته: تمامي نكاتي رو كه در مورد شي گفتيم و خواهيم گفت در بحث شي گرايي (oop) به صورت كامل توضيح خواهم داد. انشاءالله جلسات آينده.

    ما مي تونيم بنا به نيازمون خودمون هم يه شي (object) بسازيم و براي اون ويژگيها و خصيصه هايي تعريف كنيم.
    مثلا در مثال زير يه شي به نام plane مي سازيم و يه سري ويژگي مثل pitch ، roll ، yaw بهش مي ديم و به اونا هم مقدار مي ديم.
    پس فعلا لازمه كه بدونين ما مي تونيم يه شي اي رو بسازيم و يه سري ويژگي براش تعريف كنيم در همين حد فعلا كافيه!!!
    [​IMG]
    در واقع trace آخر عدد 0 رو چاپ خواهد كرد.
    بد نيست كه بدونين شي ها مي تونن ورودي براي توابع هم باشن و تابع بنا به نياز از اونا استفاده كنه . مثال زير يه نمونه از اين توابع هست كه شي plane رو كه در بالا ايجاد كرديم به عنوان ورودي بهش مي ديم
    [​IMG]

    خروجي trace ها كه به عهده خودتون! خط آخر رو هم كه مي دونين فراخواني تابعه.

    در همين حد فعلا از شي ها بدونين كافيه تا بعدا به صورت مفصل بررسيشون كنيم.

    this
    هر چي كه بيشتر با actionscript كار كنين به اين نتيجه خواهيد رسيد كه this مي تونه دوست خوب و پركابردي براتون باشه.
    this در حقيقت يه شورتكات(shortcut) براي شي يا بردي ( scope) هست كه الان دارين باهاش كار مي كنين.
    scope يا برد حوزه اي هست كه يه شي يا متغير در اون معتبره. مثلا اگه در يك function يه شي يا متغير تعريف كنيم. اون شي يا متغير فقط در حوزه اون function معتبر هستن و به عبارتي زنده (live) هستن و با خروج از آكولاد بسته function اونا از بين مي رن. يا اگه يه مووي كليپ (كه خودش شه هست) تو main تعريف بشه در تمام حوزه main برنامه scope داره.
    دو مثال زير همه چيز رو روشن مي كنه:
    در مثال اول فرض مي كنيم كه مي خوايم به يه موي كليپ كه در timeline اصلي و يا به عبارتي main برنامه قرار داره دسترسي داشته باشيم. پس this در اينجا به timeline اشاره مي كنه. يعني شما در timeline هستيد و مي خوايد به موي كليپ دسترسي داشته باشيد. پس اينجايي كه الان هستيد timeline هست و مي تونيد this رو timeline فرض كنيد.
    [​IMG]

    و در مثال زير فرض كنين كه الان در حوزه يا برد موي كليپ mc هستين و مي خواين به timeline دسترسي پيدا كنين . بنابراين الان اينجايي كه هستين موي كليپ هست پس this موي كليپ مي شه.
    parent يه كلمه كليديه و ميگه از اينجايي كه هستم يه سطح برو بالاتر. پس چون mc داخل timeline هست و this الان موي كليپمونه با parent يه سطح از موي كليپ بالاتر مي ريم و مي رسيم به timeline.
    مثال زير رو ببينيد:
    [​IMG]

    پس با يه كم دقت متجه مي شيم كه مثال بالا به width تايم لاينمون دسترسي داريم. خط آخر رو يه trace بگيرين متوجه مي شين كه مقدار پهناي timeline پروژتون رو نشان مي ده.
    نكته: اين مفهوم رو هم در مثالهاي درسهاي بعد بيشتر باهاش كار خواهيم كرد.

    شيوه هاي آدرس دهي در actionscript :
    مانند سيستم عامل و وب سايت در actionscript هم دو نوع آدرس دهي داريم آدرس دهي مطلق ( Absolute) و آدرس دهي نسبي (Relative).
    در دنياي واقعي مثلا براي آدرس دهي يه بقالي همين دو روش رو داريم:
    1) مطلق:
    -سلام داداش
    - سلام عليكم
    - ببخشيد آدرس بقالي آقا كريم كجاست؟
    - ببين برادر شما مي رين بلوار شهيد مطهري - كوچه لاله - ابتداي كوچه

    2) نسبي:
    -سلام داداش
    - سلام عليكم
    - ببخشيد آدرس بقالي آقا كريم كجاست؟
    - آقا از همينجا (الان تو بلوار شهيد مطهري وايسادن!) مي ري كوچه لاله ، بقالي ابتداي كوچست!

    همونطور كه ديدن در آدرس دهي دوم گفت از همينجا كه هستين . پس آدرس رو نسبي (نسبت به بلوار شهيد مطهري) داد. در دنياي مجازي كامپوتر هم همينطوره.

    دو روش آدرس دهي و معادل اونا رو تو ويندوز، مكينتاش و وبسايت مي بينيد. فقط اينو بدونين كه:
    1) mc1 و mc2 دو تا موي كليپ هستن كه mc2 داخل mc1 هست.
    2) root در Actionscript3 يعني نقطه صفر پروژمون در فلش. يعني هر چيزي كه به پروژمون اضافه مي كنيم. در هر صورت زير شاخه اي از root خواهد بود. حالا چه مستقيم چه غير مستقيم. مثلا يه موي كليپ مي سازيد و در تايم لاين مي ذاريم كه اون زير شاخه root هست. و يه موي كليپ ديگه مي سازيم و در موي كليپ اولي مي زاريم. موي كليپ دومي زير شاخه اولي و اون اولي خودش زير شاخه root هست. پس موي كليپ دومي نوه ي root هست:D
    3- ما با آدرس دهي مي خوايم به mc2 دسترسي پيدا كنيم.
    جدول اول در براي آدرس دهي مطلقه :
    [​IMG]

    و جدول دوم آدرس دهي نسبي از يه موي كليپ سومي كه خودش داخل timeline اصليه:
    [​IMG]

    خوب درس امروز و به همراه اون بحث مفاهيم پايه تموم شد فقط ذكر چند نكته رو لازم مي دونم.
    1) مطالب اين جلسه براي كسايي كه تازه كار هستين يه كم ثقيله! ولي تازه كارا مطمئن باشن در ادامه و در مثالهاي آينده كاملا به اين مفاهيم مسلط خواهند شد. هنوز يه عالمه درس مونده با مثالاي جور واجور
    2) از درس آينده كه روي syntax و بحثاي خودactionscript متمركز مي شيم در هر درس حتما مثال پيوستي به همراه سورس خواهيم داشت!
    3) اگه برسم مي خوام يه وبلاگ در همين رابطه راه اندازي كنم كه درس ها رو به صورت منظم و خصوصي تر اونجا هم بذارم ولي همچنان نوشتن در majidonline ادامه خواهد داشت.
    4) در اولين فرصت ممكن pdf بخش اول مفاهيم پايه اي رو آماده و در پست اول همين تاپيك قرار خواهم داد .

    در جلسه بعدي property هاي عمومي و شيوه به كار گيري اونا رو به صورت كلي توضيح خواهم داد.
     
    آخرین ویرایش: ‏7 مارس 2009
    نوشته شده توسط sizanjavad در ‏7 مارس 2009
    محمودفلش، animations، majid_jaki و 51 نفر دیگر از این ارسال تشکر کرده اند.
  11. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس دهم

    بسم الله الرحمن الرحیم
    قبل از هر چیز لازمه که سال نو رو به همتون تبریک بگم و آرزوی سالی پر از برکت و موفقیت رو برای همتون داشته باشم.
    از این جلسه قراره که یه مقدار تخصصی تر روی actionscript متمرکز بشیم. بنابراین دیگه روی مفاهیم بنیادی که قبلا توضیحشون دادیم ایست نمی کنیم و فرض رو بر این می گیریم که شما مطالب قبلی رو به خوبی خوندید و فراگرفتید. بدون فوت وقت درس امروز رو شروع می کنیم.
    برای درس امروز دو بحث مهم properties و events رو توضیح می دیم. مفاهیمی که اکشن اسکریپت به وسیله اونا به ورودی هایی واکنش می ده یا خروجی هایی رو تولید می کنه.

    Properties

    Properties یا ویژگیها چیزی هستند که به وسیله اونا می تونیم خصوصیات و ویژگیهایی رو برای یک شی تعریف , مدیریت کنیم. برای مثال شما می تونید خصوصیت width یک کلید (button) رو چک کنید یا تغییر(set) بدید.
    اکثر ویژگیها خواندنی و نوشتنی (read-write) هستند به این معنی که شما هم می تونید اونا رو بگیرید(get) و تو برنامه استفاده کنید و یا خصوصیات یه شی رو set کنید. اما بعضی از ویژگیها هم هستند که فقط خواندنی(read only) هستند که به شما اجازه Set کردن رو نمی دن.
    خوب ، بهتره بریم سر مثال. در ابتدا ما با syntax ایجاد 6 نوع تغییر پرکاربرد توی یه مووی کلیپ آشنا می شیم تا در ادامه که با handle event ها آشنا شدیم اونا رو در کدنویسی هم به کار بگیریم و تستون کنیم.
    جدول زیر و شکلها گویای همه چیز هستند.
    [​IMG]

    [​IMG]

    اونایی که سابقه استفاده از actionscript 2 رو دارن شاید متوجه یه تغییرات کوچیکی بشن. بعضی از ویژگیها undescope (یا _ ) ندارن!

    این تغییر توی actionscript 3 اعمال شده تا همه ویژگیها یکنواخت بشن و بدون _ بیان نه اینکه بعضی بدون _ و بعضی با _ بیان. بی خیال همچین مطلب مهمی هم نیست!
    دستیابی به Properties هم خیلی راحته مثل کد زیر:
    [​IMG]

    حتی میشه به وسیله operator ها (عملگرای محاسباتی) هم اونا رو دستکاری کرد مثل کد زیر:
    [​IMG]

    Events

    Event ها یا رخدادها در حقیقت مثل کاتالیزگر عمل می کنن. با اتفاق افتادن یه رخداد می تونه یه method اجرا بشه یا یه ویژگی set و یا حتی get بشه.
    برای مثال کلیک کردن ماوس یه رخداد (event) هست. یا فشار داده شدن یه کلید از صفحه کلید یا تکون خوردن ماوس و...
    همه اینا می تونن توسط برنامه نویس معیاری برای اجرای یه قطعه کد قرار داده بشن.
    Event ها انواع مختلفی دارن و هر کلاسی می تونه event های مخصوص خودش رو داشته باشه. مثلا کلاسvideo ، رخداد(event)هایی مربوط به پخش ویدئو داره و...
    برای اینکه بفهمیم در طول اجرای برنامه چه event ای اتفاق افتاده از مفهومی تحت عنوان eventlistener استفاده می کنیم.
    Eventlistener ها در حقیقت همون خاله زنکها یا فضول باشی های خودمون هستن:D. به این معنی که در طول اجرای برنامه یه گوشه ای می شینن و می پان که چه event ای اتفاق می افته تا سریعا اون رو به event handler اطلاع بدن Event listener ها بوسیله کلاسی به نام EventDispatcher پیاده سازی میشن. این کلاس امکانات جالبی رو در اختيار ما قرار میده که در آینده با چند تا از این امکانات (مثل حذف Event listener ها در مواقعی که کارشون نداریم) آشنا خواهیم شد.
    برای ایجاد یه event listener ما نیاز به استفاده از متدی تحت عنوان ()addEventListener داریم . مثال زیر رو ببینید.
    [​IMG]

    این مثال یک eventlistener رو به کلیدی به نام rotate_right_btn و گفته اگر موس روی دکمه کلیک شد به محض بالا آمدن دکمه ماوس(Mouse_up) تابع مذکور اجرا بشه.
    نکته: evt در ورودی تابع , از جنس کلاس MouseEvent تعریف شده اشاره داره به اون المنتی که به رخداد پاسخ داده مثلا در اینجا کلیدی که کلیک میشه المنت ماست.
    در ضمن کلاس MouseEvent شامل همه رخدادهای ماوس مثل کلیک و حرکت و ... هست که در ادامه بیشتر باهاش آشنا خوایم شد.
    مثال زیر دو تا رخداد رو برای یه موی کلیپ تعریف می کنه هر کدوم که اتفاق بیافتن یه تابعی رو اجرا می کنن. مثال زیر مثال معروف drag & drop هست. که با ماوس یه شی رو می گیریم و هر جا که خواستیم قرار می دیم. برنامه کامل رو در پیوست به اسم drag & drop آوردم.
    [​IMG]

    نکته: evt که در بالا توضیح داده بودم اینجا استفاده شده. اینجا ()evt.target.startDrag یعنی ببین رخداد به چی وصله(اینجا به مووی کلیپ) به هر چی که وصل بود اون شی رو شروع کن به drag کردن یا کشیدن به همراه ماوس.
    ! توجه کنید که target یه نوع property هست.
    برای امروز دیگه بسه در درس آینده کنترل property ها بوسیله event ها و اگه برسم method ها رو توضیح خواهم داد.
     

    پیوست ها:

    • darg&drop.zip
      اندازه فایل:
      کیلوبایت 5.7
      نمایش ها:
      782
    آخرین ویرایش: ‏3 آوریل 2009
    نوشته شده توسط sizanjavad در ‏23 مارس 2009
    mohandesejavan، majid_jaki، javad3d و 29 نفر دیگر از این ارسال تشکر کرده اند.
  12. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس يازدهم

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

    خوب. تعطيلات هم تموم شد و از فردا بايد بريم سر درس مشق.پي چه بهتر كه با يه پست جالب تعطيلات رو به اتمام برسونيم.
    براي اين جلسه فقط مي خوام چگونگي استفاده از رخدادها(events) براي كنترل ويژگيها(properties) رو توضيح بدم. كل بحث اين جلسه يه مثاله ، يه مثال جالب و پروپيمون كه بتونيد كلي چيز ازش ياد بگيريد و خيلي از مفاهيمي كه از اول تا حالا در موردش بحث كرديم رو در عمل تست كنيد.

    طرح مساله: 

    قراره كه يه موي كليپ داشته باشيم و به وسيله كليدهاي مختلف بتونيم ويژگيهاي ذكر شده در جدول درس قبلي براي موي كليپ رو تغيير بديم از قبيل اندازه و موقيت و stop و play و alpha و...

    در ابتدا بايد يه تو پروژمون interface اي به صورت زير درست كنيم
    [​IMG]

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

    نام گذاري رو به صورت زير انجام مي ديم ( براي نام گذاري ، كليد يا موي كليپ رو انتخاب و از پنجره پايين به نام پنجره properties در قسمت instance name نام رو وارد مي كنيم):

    نام مووي كليپ : mc
    نام كليدهاي موقعيت: pd - pu - pr - pl
    نام كليدهاي زوم: zd - zu
    نام كليدهاي چرخش : rl - rr
    نام كليدهاي وضوح: au - ad
    نام كليد نمايش: vb

    مي رسيم به كدنويسي. به فريم اول كدهاي زير رو اعمال مي كنيم. البته من براي توضيح ميون كدها پريدم ، شما به بزرگي خودتون ببخشيد:D

    در اولين گام براي هركدوم از كليدهامون يه خاله زنك ببخشيد eventlistenr قرار ميديم. به شكل زير:
    [​IMG]

    هر كليدي با رخداد كليك ، تابع مربوط به خودش رو اجرا مي كنه. تابع ها هم كه بنا به وظايفشون دستكاري تو خصوصيات مووي كليپ رو انجام ميدن. فكر نكنم نياز به توضيح بيشتر باشه. اينم تابع هاي مربوطه:
    [​IMG]

    در صورتي كه مطالب درساي قبلي رو خونده باشيد تمامي مثال رو به راحتي ميفميد و ديگه نيازي به توضيح من نيست.

    در مورد بقيه event ها مثل eventهاي صفحه كليد و ... در درسهاي آينده مثالهايي خواهيم داشت.
    در جلسه آينده به متدها methods خواهيم پرداخت.

    در ضمن مثال امروز رو به صورت كامل براتون مي ذارم كه ديگه هيچ مشكلي نداشته باشيد.
     

    پیوست ها:

    آخرین ویرایش: ‏3 آوریل 2009
    نوشته شده توسط sizanjavad در ‏3 آوریل 2009
    mohandesejavan، majid_jaki، wgolzar و 28 نفر دیگر از این ارسال تشکر کرده اند.
  13. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس دوازدهم

    بسم الله الرحمن الرحیم
    متاسفانه فاصله درس قبلی و این درس خیلی زیاد شد. از این بابت از دوستانی که بحث رو پیگیری می کنن عذرخواهی می کنم.
    همونطور که قرار بود درس امروز رو با معرفی method ها شروع می کنیم تا ببینیم در ادامه به کجا می رسیم.

    Methods
    متدها در واقع فعلهای اکشن اسکریپت هستن! همونطور که افعال در یک زبان(مثلا فارسی یا انگلیسی) بیان کننده انجام یه کاری هستند ، متدها هم در اکشن اسکریپت این کار رو انجام می دن و به آبجکت ها (مثلا کلیدها یا مووی کلیپ ها یا ...) می گن که چه کاری رو انجام بدن.
    برای مثال شما می تونین به یه مووی کلیپ بگین که بایست! به وسیله متد ()stop
    دستور زیر به موی کلیپ box میگه که بایسته.
    [​IMG]

    به بیان دیگه متدها function هایی هستن که خود اکشن اسکریپت به صورت آماده در اختیار ما قرار میده. البته این یه تعریف غیر رسمیه! بین خودمون بمونه!!!:wink:
    متدها در اصل توابعی هستن که برای کلاس نوشته می شن. یعنی اینکه در آینده که شما بتونین کلاس بنویسین هر تابعی(function) که برای کلاستون تعریف کنین اون میشه یه متد برای کلاستون.
    اینجاست که یه کشف بزرگ می کنیم. بله متدهای خود اکشن اسکریپت در حقیقت خودشون تابع هایی هستن در یه سری کلاس. یعنی شما موقعی که از یه متد استفاده می کنین در حقیقت دارین از یه کلاس کار می کشین. اینجاست که می فهمیم که as3 یه زبان شی گراست. سرتون رو درد نیارم همه این مباحث باشه برای فصل شی گرایی.
    شاید مناسب ترین کار در این زمان یه مثال باشه!! که هم توش از یه سری متد ساده استفاده کنیم و هم کار با event صفحه کلید رو یاد بگیریم.
    [​IMG]

    در مورد مثال من انتظار دارم که اگه پیگیر درسا بوده باشین خودتون همش رو بفهمین ولی بازم چندتا نکته ظریفش رو توضیح می دم.
    1- در مورد دستور swish تو درسای قبلی توضیح دادم. در مورد آرگومان ورودی اون که اینجا keycode هست. کار این دستور اینه که کد اسکی کلیدی که فشار داده میشه رو بر می گردونه و در دستورات پایینی بوسیله case ها با کد اسکی کلیدهای enter و backspace و left و... مقایسه میشه و کار مربوطه رو انجام میده.
    2- کد اسکی برای صفحه کلید در حقیقت یه کد دو رقمیه. هر کلید از صفحه کلید یه کد داره که بشه اون رو تشخیص داد. مثلا کد enter ، 13 هست. تو خط آخر switch ما مشخص کردیم که اگه هر کلیدی به غیر از کلیدایی که ما مشخص کردیم فشار داده شد کد اسکی اون رو چاپ کن.
    3- برای تست برنامه بالا موقعی که برنامه رو تست می کنین شاید کلیدای enter و backspace کار نکنن. برای فعال کردنشون از گزینه disable keyboard shortcut< control رو تیک بزنین.
    4- برنامه رو اتچ میکنم. که دیگه مشکلی نباشه.

    Event propagation (انتشار رخداد)
    در مورد diplay list در دو سه درس آینده به صورت کامل توضیح خواهم داد. ولی محض اطلاع اینو بدونین که مفهوم displaylist با as3 معرفی شد.
    Displaylist تمام آبجکت ها یی که در پروژمون وجود داره رو شامل میشه. Displaylist از stage گرفته تا swf های لود شده ،کلیدها(button) ، مووی کلیپها ، شیپ ها و... هر چی که داخل اینا و در کل هر آبجکتی که در پروژمون هست رو شامل میشه.
    در حقیقت موقعی که ما یه event رو برای یه آبجکت مثلا مووی کلیپ می فرستیم اون رخداد از ابتدای displaylist شروع به حرکت می کنه و شاخه به شاخه میاد پایین و به مووی کلیپ می رسه. یعنی در حقیقت event قبل از رسیدن به مووی کلیپ از روی stage و root هم عبور میکنه و جواب هم از این مسیر به صورت برعکس برگشت داده میشه. چون اینا تو displaylist در ردیف بالاتری از مووی کلیپ هستن.
    بزرارین یه مثال بزنیم. تصور کنین که یه مووی کلیپ داریم به نام mc1 که دو تا مووی کلیپ دیگه تو دل خودش داره به نام های mc2 و mc3 پس شکل رفت برگشت یه event به صورت دیاگرام زیر خواهد بود.
    [​IMG]

    وقتی یه event رو می فرستیم به mc2 در حقیقت event مستقیما به mc2 رجوع نمیکنه بلکه ابتدا از روی stage بعد روی اون که swf جاری رو لود کرده (در اینجا root). و بعد به mc1 و سپس به mc2 میرسه و برای برگشت نتیجه مسیر زیر رو برعکس طی می کنه.

    یه مثال کاربردی قشنگ از event propagation رو ببینید.

    در ابتدا یه آبجکت به شکل فولدر طراحی کنید به این صورت و تبدیلش کنین به مووی کلیپ. یا همین عکس رو import کنین تو فلش.
    [​IMG]

    بعد چند تا نمونه از اون بسازین و تک تک اسم گذاریشون کنین به اسم های folder0 و folder1 و...
    حالا همشون رو انتخاب کنین و گروپشون کنین(ctrl+g). گروپ رو انتخاب کنین و اسمش رو بزارین folder_group.
    در مرحله بعد روی فریم اول کلیک راست کنین و کد زیر رو بنویسین.
    [​IMG]

    [​IMG]

    همونطور که از کدها متوجه شدین ، با نوشتن event های mouse over و mouse out برای folder_group این event ها به زیر مجموعه folder_group که folder ها بودن انتشار پیدا کردن. فکرش رو بکنین اگه مجبور بودین برای هر folder دو تا رخداد رو بنیسین چقدر زحمت داشت! من برا دو تاش نوشتم شد این! حالا شما برا تمرین 120 تاش بنویسین:shock:
    [​IMG]

    نکته: همه event ها قابلیت انتشار ندارن، مثلا enter frame. برای اطلاعات بیشتر به help فلش مراجعه کنین.
    درس بعد رو با بررسی timer events ادامه خواهیم داد.
     

    پیوست ها:

    نوشته شده توسط sizanjavad در ‏23 آوریل 2009
    mohandesejavan، majid_jaki، kingmehr و 33 نفر دیگر از این ارسال تشکر کرده اند.
  14. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس سیزدهم

    بسم الله الرحمن الرحیم
    قبل از هر چیز لازم می دونم از دوستانی که با ابراز محبتشون موجب دلگرمی من میشن تا کارم رو با انرژی بیشتر ادامه بدم تشکر کنم.
    تو درسای قبلی با event ها یا رخدادها آشنا شدیم و با دو تا از event های معروف (mouse و keyboard) آشنا شدیم. در این درس قصد داریم با دو رخداد مهم و جدید دیگه(frame event و mouse event) آشنا بشیم. البته اکشن اسکریپت 3 رخدادهای زیادی داره که با بعضی های دیگه در درسای آینده آشنا خواهیم شد ولی بالتبع گفتن همشون تو درسا مقدور نیست.

    Frame Events
    این رخداد بر خلاف دو رخداد قبلی که در موردشون بحث کردیم بوسیله کاربر اتفاق نمی افته یا به اصطلاح trigger نمیشه بلکه رخداد اون بوسیله خود فلش پلیر انجام می گیره. رخداد enter frame با قرار گرفتن playhead روی هر فریم اتفاق می افته. از این رخداد میشه برای آپدیت کردن ویژگی های یه آبجکت استفاده کرد. یه مثال کوچیک در این مورد می زنم تا کار با این event رو یاد بگیرید . مثال به قدری سادست که نیازی به توضیح نمی بینم.
    [​IMG]


    [​IMG]

    نکته جالب در مورد این مثال اینه که اکشن اسکریپت خودش زاویه از 360 به بالا رو تجزیه تحلیل میکنه و نیازی نداره شما نگران باشین

    Timer Events
    مواقعی که دوست داریم یه اتفاقی در زمان مشخصی انجام بشه دست به دامن تایمر می شیم. تایمر هم معمولا برای آپدیت ویژگیهای آبجکت ها استفاده میشه ولی کاربردای دیگه ای هم داره.
    در مورد استفاده از timer Event چند تا نکته ریز رو باید بدونیم .
    اولا اینکه برای استفاده از این رخداد باید یه شی از جنس کلاس تایمر بسازیم. و مقدار دهی اولیه هم بکنیم. فعلا اینا رو بدونین تا تو درس شی گرایی دقیق بهشون بپردازیم. دو تا آرگومان می تونیم برای تابع سازنده کلاس ارسال کنیم که اول محدوده زمانی رخداد ماست و دومی که اختیاری هم هست اینکه این رخداد چند بار تکرار بشه
    [​IMG]

    دوما اینکه پارامتر اول به میلی ثانیه هست. یعنی برای اینکه رخدادمون هر یک ثانیه اتفاق بیفته باید پارامتر اول رو 1000 بدیم.
    سوما اینکه برای راه افتادن listener تایمر باید اون رو start کنیم. حتی می تونیم هر زمان که بخوایم اون رو stop کنیم.
    بریم سر مثال. تو مثالمون یه ثانیه شمار سادس که کدش هم کاملا واضحه
    [​IMG]

    [​IMG]

    فعلا دیگه وقت ندارم اینا باشه تا تو درس آینده با چندتا مثال دیگه فصل رو تموم کنیم.
     

    پیوست ها:

    • frame events.zip
      اندازه فایل:
      کیلوبایت 31.1
      نمایش ها:
      750
    • timer events.zip
      اندازه فایل:
      کیلوبایت 14.9
      نمایش ها:
      666
    نوشته شده توسط sizanjavad در ‏2 می 2009
    mohandesejavan، DatFreeman، majid_jaki و 34 نفر دیگر از این ارسال تشکر کرده اند.
  15. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس چهاردهم

    بسم الله الرحمن الرحیم
    قبل از هر چیزی از تمام کسای که پیغام می زارن و تشکر می کنن یه جا تشکر می کنم که با پیاماشون باعث دلگرمی من به ادامه کارم می شن
    در ادامه از همه کسایی که پیگیر درسا هستن بابت تاخیر تو آپ درسا عذرخواهی می کنم. خداییش این دفعه قرار نبود اینقدر طولانی بشه ولی متاسفانه به دلیل فوت عموم نتونستم درس رو آماده کنم. :sad: یه فاتحه براش بخونین! هر کی نخونه ایشالله که از درس هیچی نفهمه:D

    همونطوری که قرار بود فصل دوم رو با درس امروز تموم می کنیم. تو درس امروز یه مثال خیلی ساده از timer event که جلسه قبلی معرفیش کردیم داریم. از مطرح کردن این مثال سه تا هدف دارم:
    1. با timer event که خیلی مهمه بیشتر آشنا بشین
    2. یه بازی ساده رو بنویسین که ببینین بازی نوشتن تو فلش خیلی ساده و راحته
    3. در حد آشنایی با display list آشنا بشین که قراره فصل بعد رو کاملا به اون بپردازیم

    نکته: کد برنامه خیلی سادس به این دلیل که نمی خواستم زیاد شلوغ بشه. ایشالله بعد از بحث display list کاملش می کنیم و نقایصش رو برطرف می کنیم.

    بازی شلیک به خرگوش
    طرح مساله:
    می خوایم یه بازی رو طراحی کنیم که هر یک ثانیه یک خرگوش یه جا از صفحه ظاهر بشه. اگه کاربر روش کلیک کنه یه پیغام چاپ کنه

    حالا یکی یکی موارد قرمز رنگ رو بررسی می کنیم.
    هر یک ثانیه: پس باید یه timer بذاریم که هر یه ثانیه یه خرگوش (موی کلیپ) رو نمایش بده
    یه جا از صفحه: چون می خوایم اون یه جا اتفاقی انتخاب بشه که کاربر نتونه از قبل پیش بینیش کنه باید به صورت اتفاقی x و y اون رو انتخاب کنیم. که این کار هم بوسیله تابع random از کلاس math قابل انجامه
    روش کلیک کنه : پس باید یه mouse event هم داشته باشیم.

    خوب، اینم از کد برنامه:


    [​IMG]


    تو خط اول یه نمونه از نوع مووی کلیپ از کلاس sibl می سازیم و اسمش رو می ذاریم hadaf. حالا ببینیم اصلا sibl چی هست. sibl در حقیقت همون خرگوش (مووی کلیپیه) که ما می خوایم روی صفحه ظاهر بشه و کاربر بهش شلیک کنه.
    موقعی که ما مووی کلیپمون (همون خرگوش) رو می سازیم روش کلیک راست می کنیم و گزینه linkage رو انتخاب و از منوی باز شده export for action script رو تیک می زنیم و اسمش رو می ذاریم sibl. این باعث می شه که یه کلاس به این نام از این مووی کلیپ ایجاد بشه و ما هر موقعی که تو طول برنامه نیاز ش داشتیم یه نمونه ازش بسازیم(مثل خط اول این کد)

    [​IMG]

    [​IMG]
    نکته: تو as3 تنها راه استفاده از مووی کلیپ به همین صورته!
    خوب، تو خط دوم با استفاده از دستور addchild این نمونه از مووی کلیپ رو که ساختیم به stage(صفحه نمایش) اضافه می کنیم و اونو نمایش میدیم. اگه این کار رو نکنیم نمونه از مووی کلیپ تو حافظه ساخته می شه ولی نمایش داده نمیشه! addchild جزو مباحث displaylist هست که تو فصل بعد قراره بهش بپردازیم.
    تو خطوط 3 و 4 هم که واضحه! x و y نمونه مووی که ساختیم رو صفر می ذاریم.
    نکته: کاری به این نداشته باشین که چرا این 4 خط رو نوشتم. بعد از فصل displaylist بهش می پردازیم. اما اگه کسی دلیلش رو بگه معلومه که بچه باهوشیه:D
    خوب تو خطوط بعدی یه timer می سازیم و هر یه ثانیه فعالش می کنیم و تابع onTimer رو صدا می زنیم.
    توی تابع onTimer ابتدا دو تا عدد تصادفی تولید می کنیم و می ریزیم توی دو ا متغیر به نام a و b.که به ترتیب برای x و y خرگوشمون استفاده خواهیم کرد.
    نکته: اون عدد 500 و 350 جلوی تابع رندوم برای اینه که عدد تولید شدمون در محدوده 0 تا 500 و 0 تا 350 به ترتیب طول و عرض صفحمون هستن باشه.:paint:
    در خط بعدی removeChildAt(0 باعث میشه مووی کلیپی که در مرحله قبل به stage به عنوان فرزند اضافه شده حذف بشه(این خط رو حذف کنین ببینین چی میشه). در حقیقت بچه های سطح صفر رو در displaylist حذف می کنه. این هم مربوط به همون بحث جلسه بعدمون که قبلا ذکر شد.
    پس می بینیم که برای کدنویسی hot با as3 حتما باید از displaylist استفاده کنیم!

    در خطوط بعدی یه نمونه از مووی می سازه و x و y اش رو اعداد تصادفی تولید شده توسط تابع رندوم میده. در حقیقت در هر مرحله اجرای تابع(هر یک ثانیه) یه نمونه از مووی ساخه میشه و یه eventlistenet از نوع کلیک ماوس بهش وصل میشه که میگه اگه روی این مووی کلیک شد چاپ کن ok.

    نکته: هر کی که درسا رو پیگیری کرده و می تونه این نمونه بازی رو پرورش بده و کاملترش کنه لطفا تو پستای بعدی نمونه خودش رو بزاره تا هم منون خوشحال کنه و هم به بقیه کمک کنه. فقط خواهشا کد رو پیچیده نکنین که تازه کارا راحت بفهمن.

    پاک کردن event listener ها:
    موقعی که ما یه eventlistener رو به کار می گیریم در حقیقت داریم از کامپیوتر حافظه می گیریم. اگه بعد از اینکه کارمون با اون event listenr تموم شد حافظه اشغال شده رو آزاد نکنیم به مرور حافظه زیادی از کامپیوتر گرفته می شه که باعث کندی دستگاه میشه.
    با دستور removeEventListener می تونیم این کار رو بکنیم. مثال زیر رو ببینین و اجراش کنین تا ببینین چی میشه. نیازی به توضیح نمی بینم. کاملا واضحه!!!

    [​IMG]
    نکته: اکشن اسکریپت خودش یه موتوری به نام gorbage collector هم داره که هر چند وقت یه بار حافظه هایی که در زمان اجرا از کامپیوتر گرفته شده و دیگه کاری بهشون نداریم به صورت اتوماتیک رو آزاد می کنه
    در اینباره تو درسای بعدی با یه مثال توضیح خواهیم داد.
     

    پیوست ها:

    • game.zip
      اندازه فایل:
      کیلوبایت 24.4
      نمایش ها:
      715
    • removeListener.zip
      اندازه فایل:
      کیلوبایت 14.6
      نمایش ها:
      578
    آخرین ویرایش: ‏23 می 2009
    نوشته شده توسط sizanjavad در ‏23 می 2009
    محمودفلش، mohandesejavan، javad3d و 33 نفر دیگر از این ارسال تشکر کرده اند.
  16. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس پانزدهم

    بسم الله الرحمن الرحیم
    سلام و عرض ادب خدمت تمام دوستان و عرض خواهی مجدد بابت تاخیر در قرار دادن درسا. باور کنید امتحانای این ترم خیلی سنگین بود و فرصت سر خاروندنم نداشتم. این چند روزه رو هم که امتحانا تموم شده درگیر چند تا پروژه هستم که هیچ وقتی برام نذاشته. ولی با این حال سعی می کنم گاهی وقتی لایی بکشم و درسا رو ادامه بدم تا اینکه سرم خلوت تر بشه و درسا رو به صورت جدی ادامه بدم. ضمنا اینو بگم که ایشالله تا آخر تابستون دیگه می خوام آموزشا رو به یه جایی برسونم.
    ضمنا از دوستانی که سابقه دارن عاجزانه تقاضا دارم که بهم کمک کنن. من انتظار خیلی بیشتری ازشون داشتم. دوستانی که خودشون تو همین مجید آنلاین فلش رو یاد گرفتن و الان بزرگ شدن.ولی هیچ کمکی در زمینه یادگیری به بچه های تازه کار نمی کنن.

    از گله و شکایت بگذریم و بریم سر درس. درس امروز فقط بهانه ایه برای شروع فصل جدیدمون که displaylist هست. یکی از مفاهیم مهم و کلیدی که تو AS3 معرفی شد و خیلی از مشکلات As2 رو برطرف کرد. چون مطلب آموزش As3 هست و فرض من از اول بر اون بوده که خواننده های این تاپیک صفر هستن اصلا AS3 رو با As2 مقایسه نمی کنم .

    در این فصل

    1- ابتدا displaylist رو معررفی می کنیم
    2- ویژگیهای کلاسای مربوط به displaylist رو بیان می کنیم
    3- اضافه و حذف کردن فرزند(موی کلیپ-کلید-تصویر و ... هر آبجکتی) به displaylist
    4- مدیریت displaylist از قبیل تغییر نام آبجکتا و تغییر مکانشون و اندازه و ...
    5- مدیریت سلسله مراتب فرزندای لیست نمایش و تغییر اونا
    6- و در نهایت سعی خواهم کرد یه مثال جون دار نون آب دار و مشتی و مشتری پسند:lol: بزنم که کلیه 5 مورد بالا رو به صورت عملی تست کرده باشیم

    معرفی displayllist

    Displaylist در بیان ساده وسیله ای هست برای اینکه بتونیم آبجکتهایی مثل مووی کلیپ یا کلید یا تصویر(Bitmap) و یا text و... رو در زمان اجرا به پروژه که همون فایل swf امون هست رو اضافه کنیم. این اضافه سازی به صورت سلسله مراتبی صورت می گیره و آبجکتای اضافه شده تشکیل یه درخت رو می دن که هر برگش می تونه یه نوع آبجکت باشه.

    خوب. حالا این displaylist برای خودش یه ساختاری داره که برای کار با اون باید این ساختار رو درست بشناسیم.
    همونطور که در شکل زیر(شکل 1) می بینیم بالاترین سطح در displaylist یه DisplayObjectContaner هست به نام stage. در پایین stage تایم لاین اصلی (فایل swf اصلی برنامه) وجود داره.
    [​IMG]

    نکته: DisplayObjectContaner یه نوع DisplayObject هست که خودش می تونه شامل المنت های دیگه و یا displayobject های دیگه باشه. برای مثال در ادمه خواهید دید که تو displaylist کلاسهای bitmap , shape و ویدئو داریم که هر کدوم از اینا یه displayobject(شی نمایش) هستن ولی نمی تونن شامل چیز دیگه ای باشن. ولی movieclip علاوه بر اینکه یه diplayobject هست می تونه شامل displayobject های دیگه هم باشه که این موضوع باعث می شه که مووی کلیپ یه DisplayObjectContaner هم باشه.

    خوب برگردیم به شکل.
    همونطوری که از شکل پیداست تو displaylist ما همیشه یه شی stage داریم که داخل این stage یه شی از تایم لاین اصلی ما وجود داره. تا اینجاش همیشه وجود داره.
    حالا در داخل این شی تایم لاین ما هر displayobject و DisplayObjectContaner ای می تونیم داشته باشیم. این که چند تا displayobject و از چه نوعی در داخل شی تایم لاین باشه دیگه به عهده خود ماست

    برای اینکه توضیحات بالا بیشتر بهمون بچسبه مثال زیر رو بررسی می کنیم.

    [​IMG]
    فرض کنین ما یه پروژه رو تو فلش باز می کنیم و بی درنگ یه shape تو پروژه مون رسم می کنیم. مثلا یه مربع. بعد از اون یه رو صفحه تایپ می کنیم. در ادامه عکس این آقا کوچولو رو که در حقیقت یه bitmap هست رو به داخل پروژمون import میکنیم و اون رو انتخاب کرده و اون رو تبدیل به مووی کلیپ می کنیم. پس یه مووی کلیپ حاوی bitmap این آقا کوچولو ایجاد می شه. پس مووی کلیپ اینجا یه کانتینر حاوی bitmap میشه.
    تمام این مثال رو مطرح کردیم که بگیم آقاجوووو!(به قول ما کاشونیا:D) شکل پایین میشه displaylist این مثالمون

    [​IMG]


    فکر کنم دیگه با این مثال و شکل مفاهیم پایه ای display list رو کاملا فهمیده باشین.

    شکل زیر کلاسهای مختلف displaylist رو نمایش میده.

    [​IMG]

    نکته: همونطور که تو شکل میبینیم آخرین سطح مووی کلیپه. ولی اشتباه نکنین!!! این به این معنی نیست که مووی کلیپ در سطح پایین تری نسبت به بقیه displayobject ها قرار داره. در حقیقت این نمودار داره نوع کلاسها و والدهای اونارو نشون می ده. مثلا در مورد مووی کلیپ می گه:
    مووی کلیپ یه نوع Sprite هست که این Sprite خودش یه نوع DisplayObjectContainer هست که این DisplayObjectContainer خودش یه نوع InteractiveObject هست که این InteractiveObject خودش یه displayobject هست:shock:
    ولی shape فقط و فقط و فقط یک نوع displayobject هست و بس!!!!

    شکل رو خودتون دقیقتر بررسی کنین تا تو درس بعدی کلاسای اون و ویژگیهاشون رو یکی یکی بررسی کنیم.
     

    پیوست ها:

    • 15-1.jpg
      15-1.jpg
      اندازه فایل:
      کیلوبایت 47.2
      نمایش ها:
      1,287
    • 15-2.jpg
      15-2.jpg
      اندازه فایل:
      کیلوبایت 42.3
      نمایش ها:
      1,261
    • 15-3.jpg
      15-3.jpg
      اندازه فایل:
      کیلوبایت 52.4
      نمایش ها:
      1,250
    • 15-4.jpg
      15-4.jpg
      اندازه فایل:
      کیلوبایت 47.9
      نمایش ها:
      1,319
    آخرین ویرایش: ‏5 جولای 2009
    نوشته شده توسط sizanjavad در ‏5 جولای 2009
    محمودفلش، mohandesejavan، majid_jaki و 31 نفر دیگر از این ارسال تشکر کرده اند.
  17. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس شانزدهم

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

    قبل از شروع درس ،از تمامی دوستانی تاپیک رو پیگیری میکنن به خاطر تاخیر در آپدیت عذرخواهی میکنم. واقعا سرم شلوغه.
    ضمنا از behrouzpc عزیز بابت تکمیل مثال "بازی خرگوش" تشکر می کنم. ایشالله این بازی رو اخر این فصل به صورت جدی تکمیل ترش میکنیم.

    برای این جلسه کلاسای شکل زیر رو که درس قبلی قولش رو داده بودم ، به صورت اجمالی توضیح می دیم.

    [​IMG]

    DisplayObject:
    هر چیزی که می تونه تو لیست نمایش وجود داشته باشه یک شیء نمایشه(DisplayObject ) . همونطور که تو شکل می بینید اکثر کلاس های تخصصی از DisplayObject مشتق شدن.

    Shape:
    shape در حقیقت یک مستطیل ، بیضی ، خط ، و یا هر چیزی هست که به وسیله ابزارهای رسم خود فلش ایجاد شده.:paint:
    تو اکشن اسکریپت 3.0 ، این ویژگی اضافه شده که شما می تونید در زمان اجرا shape ایجاد کنید

    Bitmap
    یک bitmap ایجاد شده در زمان اجرا بوسیله اکشن اسکریپت و با استفاده از کلاس BitmapData است. توجه داشته باشید که یک JPG که از بیرون import میکنیم این نوع از bitmap حساب نمیشه، بلکه یه نوع shape حساب میشه.
    پس از ایجاد یک bitmap با این کلاس ،می تونیم یک JPG رو به اون وارد کنید و نمایشش بدیم

    Video
    یه آبجکت نمایش ویدئو ، حداقل چیزیه که برای نمایش یه فیلم لازمه!! صرف نظر از هر ویدیو کامپوننتی!

    InteractiveObject
    این کلاس شامل هر شی در صفحه نمایشه که کاربر می تونه با استفاده از موس و یا کیبورد باهاش تعامل داشته باشه. از این کلاس برای دستکاری در لیست نمایش داده به صورت مستقیم استفاده نمی کنیم. در عوض ، با فرزندان اون(که در شکل می بینید) کار می کنیم

    SimpleButton
    این کلاس برای ایجاد کلیدی استفاده میشود که از نظر کارایی شبیه دکمه هایی است که احتمالا تجربه کار کردن با اونا رو در حالت طراحی عادی داشتین .(همون کلید عادی که تو کتابخونه فلش پیدا میشه یا می تونیم خودمون با button symble ایجادشون کنیم) .
    تو در اکشن اسکریپت 3.0 ، می تونیم دکمه هایی در زمان اجرا (runtime) ایجاد کنیم و از اشیاء دیگر را برای حالت های up ، down ، over ، و hit کلید استفاده کنیم.

    TextField
    این کلاس عناصر پویا و ورودی متن را شامل میشود، که قابل کنترل بااکشن اسکریپت هستند.

    DisplayObjectContainer
    این کلاس شبیه به DisplayObject هست . تفاوت در اینجا اینه که این شیء می تونه شامل فرزندانی باشه.
    تمام DisplayObjectContainer ها در حقیقت یه نوع DisplayObject هستند ولی تنها DisplayObject هایی که می تونن فرزند داشته باشن DisplayObjectContainer حساب می شن.:shock:
    بزارین یه مثال بزنیم که قضیه روشن تر بشه:

    یه video همونطور که از شکل پیداست یه شی نمایشه(DisplayObject) ولی نمی تونه فرزندی داشته باشه اما یه movieclip یه نوع DisplayObject هست که می تونه فزندانی مثل bitmap ، textو ... داشته باشه. پس movieclip یه نوع DisplayObjectContainer هم هست.

    چهار نوع DisplayObjectContainer داریم که عبارتند از:

    Stage:
    stage ، به خودی خود بخشی از این لیست نمایشه. از این کلاس برای آدرس دهی هر شی تعاملی استفاده میشه ، همیشه اشیا داخل stage قرار دارن و برای آدرس دهی اونا می تونیم از stage استفاده کنیم. پس stage یه نوع DisplayObjectContainer هست.

    :Sprite
    sprite در حقیقت یه مووی کلیپ ساده ی بدون تایم لاینه! اکثر کارای حرفه ای که با اکشن اسکریپت انجام میشه حاوی مووی کلیپ هایی با یک فریم هستند. بنابراین دیگه مدیریت فریم ها و یا حرکت فریم به فریم برای این مووی کلیپها بی معنا هستن. خوب نتیجه می گیریم که چه کاریه؟!!! از sprite استفاده می کنیم:D

    Loader:
    این کلاس برای لود کردن آبجکتهای بیرونی جهت نمایش در display list استفاده میشه. مثل bitmap یا swf هایی که از بیرون لود می شن

    MovieClip:
    دقیقا همون چیزیه که تا حالا به عنوان مووی کلیپ می شناختیم .هیچ فرقی نداره. فقط اینجا با اکشن اسکریپت ایجاد و کنترل میشه.از اول درسا تا حالا باهاش کار کردیم.پس نیازی به توضیح نداره!!!.

    خوب! اینم از DisplayObjectContainer ها!!!

    حالا ادامه نمودار رو یپگیری می کنیم:

    :AVM1Movie
    swf هایی که با زبانهای اکشن اسکریپت 1 و 2 ساخته شدن بوسیله atction script virtual machin1 یا به قولی AVM1 اجرا میشن. در صورتی که زبان اکشن اسکریپت 3 از AVM2 برای اجرا کردن کدها استفاده می کنه. این کلاس برای حل این مشکل تهیه شده. بله درست حدس زدین! این کلاس برای اجرای swf های لود شده از بیرون که بوسیله اکشن اسکریپت 1 و 2 ساخته شدن هست.

    MorphShape و StaticText:
    این دو کلاس به ترتیب برای ارائه motion shape و کار با متن های ثابت هستن. هردوشون در حقیقت یه نوع display object هستن و می تونن بوسیله اکشن اسکریپت کنترل بشن. مثلا یه متن به این صورت می تونه جابجا بشه یا چرخش داشته باشه.

    آخیش تموم شد...!!! کلاسهایی رو که معرفی کردیم در درسهای آینده به صورت عملی به کار خواهیم برد. کافیه فقط یک بار هر کدوم رو مطالعه کنین تا فقط اگه جایی تو کدها دیدنشون بدونین چی هستن و چیکار می کنن . در همین حد کافیه.

    از جلسه آینده به بعد دیگه به صورت عملی با display list کار خواهیم کرد. راستش خودمم از تئوری گفتن متنفرم:mad:، ولی یه وقتایی مباحث تئوری پیش نیاز کار عملی هستن و کاریش هم نمی شه کرد. می دونم مباحث این جلسه خسته کننده بوده، به همین خاطر این گل رو از طرف من داشته باشین شاید تلافی بشه:rose:
     
    آخرین ویرایش: ‏29 جولای 2009
    نوشته شده توسط sizanjavad در ‏29 جولای 2009
    mohandesejavan، majid_jaki، wgolzar و 30 نفر دیگر از این ارسال تشکر کرده اند.
  18. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس هفدهم

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

    قبل از شروع درس یه نکته رو بگم ، اونم اینکه قراره از هفته بعد hadimetal عزیز درسا رو با مبحث معرفی و آموزش class ادامه بدن. بنابراین من باید تا هفته آینده بحث displaylist رو تموم کنم تا ایشون بتونه مبحث رو شروع کنه. بنابراین این هفته درسها رو پیگیری کنین که احتمالا دو سه تا درس داشته باشیم به صورت فشرده

    خوب همونطور که جلسه قبل قول داده بودم بریم سر مباحث عملی و استفاده از displaylist

    نمایش displaylist

    بدون هیچ پیش توضیحی می ریم سر یه مثال. تو این مثال قصد داریم اعضا یا به عبارتی آبجکت های موجود در یک لیست نمایش رو نمایش بدیم. مثال رو در پیوست آوردم. کدش رو هم همینجا تحلیل می کنیم.ولی قبل خوندن کد بهتره که برنامه رو یه بار اجرا کنین تا راحت تر باهاش ارتباط برقرار کنین
    شکل پایین در حقیقت محتویات برنامه ما یا به عبارتی محتویات displaylist ما رو نشون می ده.

    [​IMG]


    ---در ابتدا یه MovieClip به نام largeContainer
    ---داخلش سه عدد مووی کلیپ به نام های child0 و child1 و smallContainer
    --- و داخل smallContainer یه مووی کلیپ به نام child2

    اینا رو داشته باشین تا بریم سراغ کد

    [​IMG]


    همونطور که تو خط اول میبینید تابع اصلی برنامه showChildren هست که کارش اینه که ایم آبجکت ها رو چاپ کنه. این تابع به عنوان ورودی یه DisplayObject می گیره و شناسه اون رو dispObj می ذاره.
    تو خط دوم یه حلقه for داره که به تعداد فرزندان این DisplayObject عملیاتش تکرار میشه.

    نکته: خط آخر رو نیگا کنین. تابع برای اولین بار stage رو به عنوان ورودی می گیره. بنابراین نتیجه می گیریم که عملیات تابع به تعداد فرزندان داخل stage که تمام آبجکت های موجود در برنامه هستن انجام خواهد شد.

    تو خط سوم یه DisplayObject به نام obj می سازیم و فرزند سطح i ام dispObj(ورودی تابع) رو داخل اون قرار می دیم.
    در خط بعدی بررسی می کنیم که آیا این فرزند از نوع DisplayObjectContainer هست یا نه؟
    اگه نبود که فقط نوعش رو چاپ می کنیم. (قسمت else)
    ولی اگه DisplayObjectContainer بود اسمش رو چاپ می کنیم و نوعش رو و دوباره خود همین DisplayObjectContainer رو به عنوان ورودی به تابع showChildren می فرستیم.(تابع بازگشتی که تو درسای قبلی توضیح دادم)

    اگه پیگیر درسا بوده باشین مثال رو به راحتی میفهمین!!!!
    دیدن کار کردن با displaylist چقدر راحته؟:cool:

    اگه برنامه رو اجرا کرده باشین خروجی زیر رو در پنجره trace خواهید داشت.

    [​IMG]

    بیاین یه مقدار کدمون رو دستکاری کنیم و خروجیمون رو خوشکلتر کنیم. یعنی با ایجاد تو رفتگی متناسب با سطح فرزندا ساختار درختی لیست نمایش رو به صورت واضح تری نمایش بدیم. وای چه جمله قلنبه ای :shock: نگران نباشین مثال رو ببینین خودش باهاتون حرف می زنه و منظور منو می رسونه:wink:

    [​IMG]

    تابع showChildren رو به صورت زیر اصلاح می کنیم:
    اول از همه تابع رو دو ورودی می کنیم. یه ورودی دیگه به نام indentLevel از نوع عددی به ورودی تابع اضافه می کنیم. indentLevel در حقیقت نشون دهنده سطح آبجکتمونه که الان ارسال شده به عنوان ورودی تابع.

    نکته: بازم اگه توجه کنین می بینین که برای بار اول stage رو با صفر صدا زدیم یعنی این که سطح stage در لیست نمایش صفره.

    خطوط دو سه و چهار هم که مثل برنامه قبلیه . تو خط پنجم موقعی که آبجکت از نوع DisplayObjectContainer باشه موقع اولا trace گرفتن سطح آبجکت جاری (indentLevel) رو برای تابع padIndent (که در ادامه بررسیش می کنیم) می فرستیم و سپس showChildren رو بصورت بازگشتی صدا می زنیم. البته برای showChildren سطح این آبجکت بعلاوه 1 رو می فرستیم. کاملا واضحه که فرزند این آبجکت یه سطح از خودش پایین تره!!!!

    تو خط هشتم هم که اگه آبجکت DisplayObjectContainer نبود سطحش رو برای padIndent می فرستیم هرچی که padIndent برگردوند به انتهاشم آبجکت رو می چسبونیم و چاپ میکنیم

    بررسی تابع padIndent :

    طرز کار این تابع بسیار بسیار سادست. به این صورت که به عنوان ورودی سطح آبجکت رو می گیره و شناسه indents رو بهش می ده.
    در خط دومش متغیری به نام indent (توجه کنین این S نداره!!!) تعریف می کنه و مقدار رشته تهی رو بهش میده.
    در خط بعدی یه حلقه for داره که به ازای عدد سطح آبجکت به indent چند کارکتر space اضافه می کنه.
    در انتها همین مقدار indent که یه رشته هست رو برمیگردونه.
    این مقدار برگردونده شده همونطور که تو تابع showChildren دیدن به ابتدای آبجکتی که قراره چاپ بشه اضافه میشه.

    خروجی این برنامه رو ببینین که چه خوشکل و منظم شده!!!!

    [​IMG]

    این برنامه رو هم اتچ کردم . خودتون اجراش کنین و نتیجه رو ببینین.

    در جلسه آینده شیوه های add کردن و remove کردن آبجکت به و از :lol: لیست نمایش رو توضیح خواهیم داد.
     

    پیوست ها:

    آخرین ویرایش: ‏2 آگوست 2009
    نوشته شده توسط sizanjavad در ‏2 آگوست 2009
    mohandesejavan، wgolzar، javad3d و 25 نفر دیگر از این ارسال تشکر کرده اند.
  19. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس هجدهم

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

    قبل از هر چیز لازمه ولادت حضرت مهدی (عج) رو به همتون تبریک بگم. ایشالله که هرچی زودتر ظهور کنن و آزاد کنن ما رو از این چار دیواری که همه دنیا چاردیواریه!!!! :sad:(خدا بیامرزدت مهدی فتحی)
    الان که دارم این درس رو تایپ می کنم به حساب در مسافرت به سر می برم ولی چون تا یه شنبه ، دوشنبه باید بحث displaylist رو تموم کنم ،چاره ای نیست دیگه...
    خوب بریم سر درس و بحث

    اضافه سازی و حدف آبجکت ها

    تا الان فقط به توصیف ویژگی های displaylist آنالیز اون پرداختیم. ولی بحث مهمتری که باید یاد بگیریم چگونگی اضافه سازی و یا حذف فرزند به و از لیست نمایش در حالت اجرا(runtime) است.
    نکته: هر عضوی که تو لیست نمایش وجود داره فرزند اون حساب میشه. هر عضوی هم که زیرشاخه یه عضو دیگه باشه فرزند اون حساب میشه. مثلا اگه داخل یه مووی کلیپ یه عکس داشته باشیم اون عکس فرزند اون مووی کلیپ حساب میشه

    اضافه کردن آبجکت(فرزند) به لیست (addChild)

    برای اضافه کردن آبجکت به لیست نمایش دو مرحله خیلی کوچیک رو پشت سر بذارین.
    الف) ساختن یه آبجکت. مثلا ساختن یه آبجکت از نوع مووی کلیپ
    [​IMG]

    ب) اضافه سازی آبجکت به لیست نمایش
    [​IMG]

    نکته: در مرحله اول ما فقط آبجکت رو می سازیم بدون اینکه نمایشی از اون داشته باشیم. ولی با اجرای مرحله دوم آبجکت نمایش داده میشه.
    حتی به راحتی این امکان وجود داره که ما آبجکتمون رو به عنوان فرزند یه آبجکت دیگه هم اضافه کنیم. مثلا تو کد پایین ما همین mc رو به مووی کلیپی به نام navBar اضافه می کنیم.
    [​IMG]

    مثل مووی کلیپ بقیه انواع آبجکت ها هم به همین سادگی به لیست اضافه می شن. مثلا
    [​IMG]

    اضافه سازی سمبلهای موجود در کتابخانه به لیست نمایش

    تا حالا هر آبجکتی که به لیست اضافه کردیم آبجکت خالی بوده اما حالا می خوایم آبجکتایی که تو کتابخونه وجود داره رو به لیست اضافه کنیم.
    در ابتدا باید یه آبجکت بسازیم و اون رو به کتابخونه اضافه کنیم. ما در این مثال یه مووی کلیپ (یه چرخه) می سازیم.
    در مرحله بعدی باید اون آبجکت رو به عنوان یه کلاس معرفی کنیم. مفهوم این جمله رو در فصل بعد (کلاسها) درک خواهید کرد.
    برای ساختن کلاس از این آبجکت. ابتدا کتابخونه رو باز میکنیم و روی آبجکت(اینجا تو این مثال یه چرخه) کلیک راست می کنیم و گزینه linkage رو انتخاب می کنیم.
    [​IMG]

    تو پنجره باز شده تیک export for actionScript رو میزنیم و نام کلاسمون رو توی تکست باکس مخصوص می نویسیم.(تو این مثال ما نام Unicycle برای کلاس در نظر میگیریم)
    [​IMG]

    مرحله آخر کار ما ساختن یه نمونه از کلاسه. چون کلاس از جنس مووی کلیپه باید نمونه ای هم که می سازیم(نمونه خالی) از جنس مووی کلیپ باشه.
    مرحله آخر هم اضافه سازی آبجکت به لیست نمایشه
    [​IMG]

    نمونه این برنامه در قسمت برنامه های اتچ شده موجوده.

    اضافه سازی آبجکت به یک سطح خاص (addChildAt)

    متد AddChild آبجکت رو به انتهای لیست نمایش اضافه می کنه ولی مطمئنا مواردی پیش میاد که ما نیاز داشته باشیم تا آبجکت رو به سطح مورد نظرمون اضافه کنیم. اینکار به وسیله متد addChildAt() قابل انجامه
    مثال زیر همه چیز رو روشن می کنه.
    [​IMG]

    این مثال خیلی ساده با هر کلیک یه توپ رو با نام کلاس Ball به لیست نمایش اضافه می کنه و در هر مرحله توپ رو به 10 پیکسل پایین تر اضافه می کنه.
    تو خط اول یه متغیر به نام inc ایجاد کرده و مقدار اوله اون رو صفر می ذاریم.
    تو خط بعد یه eventlistener به stage اضافه می کنیم که با هر کلیلک تابع onClick فراخونی بشه.

    نکته: true و false آخر eventlistener باعث میشه یه جورایی هر موقع که کار باهاش تموم شه eventlistener خود به خود از حافظه حذف بشه. (توضیحاتش فنیه و از حوصله جمع خارج). فقط اینو بدونین که اگه به انتهای eventlistener سه قسمت 0 و false و true رو اضافه کنین بهتره. (مربوط میشه به بحث garbage collector که در انتهای درس توضیح داده شده)
    تنها نکته ای که تو تابع onClick قابل ذکره همون متد AddChild هست که توپ (Ball) ایجاد شده در این مرحله رو به سطح صفر اضافه می کنه. یعنی همه توپها به سطح صفر displaylist اضافه میشن.

    خوب ، اینم از بحث اضافه سازی به سطح خاص. حالا بریم سراغ حذف آبجکت از displaylist.

    حذف کردن آبجکت ها از لیست نمایش و آزاد کردن حافظه

    بر قضیه حذف آبجکت ها هم همون قوانین اضافه سازی آبجکت به لیست نمایش حاکمه.
    برای حذف یه آبجکت از لیست نمایش فقط نوشتن کد ساده زیر کفایت می کنه
    [​IMG]

    و برای حذف یه آبجکت از یه سطح خاص به صورت زیر هست
    [​IMG]

    خوب ، همون مثال قبلی در مورد اضافه سازی آبجکت به سطح خاص رو اینجا میاریم به یه سری تغییرات.
    [​IMG]

    تغییراتش رو می گم، خودتون تو کد بررسی کنید.
    اولا اینکه به جای کلیک، اضافه سازی آبجکت ها رو به وسیله یه حلقه انجام میدیم. یه حلقه که 20 بار اجرا میشه و 20 تا Ball به لیست نمایش اضافه میکنه.
    و بعد از اونا هم یه eventlistener که با هر کلیک تمام فرزندان موجود در سطح صفر رو پاک می کنه.

    نکته : اگه این برنامه رو که نمونش هم تو برنامه های اتچ شده هست رو اجرا کرده باشین باید متوجه یه قضیه شده باشین. با کلیک 20 تمام آبجکت ها حذف می شن و با کلیک 21 چون دیگه آبجکتی تو سطح صفر وجود نداره با error ای با مضمون the supplied index is out of bounds مواجه میشین. برای رفع این خطا کد زیر رو می نویسیم که برای حذف هر آبجکت در تابع onClick شرط وجود فرزند چک بشه.(بوسیله numChildren )
    [​IMG]

    حذف کردن آبجکت ها از حافظه

    اگه یادتون باشه تو بخش eventlistener ها گفتیم که هر موقع که کارمون با eventlistener تموم شد بهتره که اون رو از حافشه حذفش کنیم. خوب دلیلشم معلومه! با زیاد شده eventlistener ها تو حافظه شاید با کمبود حافظه مواجه بشیم و سرعت اجرا برناممون هم پایین بیاد.
    در راستای همین موضوع باید همین کار رو برای آبجکتهایی که به لیست اضافه می کنیم هم انجام بدیم. یعنی وقتی که کارمون باهاشون تموم شد اونا رو از حافظه بندازیم بیرون.

    نکته: خود ActionScript به تبعیت از زبان جاوا یه موتور به نام garbage Collector داره که هر چند وقت یه بار خود به خود فعال میشه و eventlistener ها و آبجکتهای اضافه و ناکارا رو حذف می کنه. ولی چه بهتر که ما خودمون این کار رو قبل از garbage Collector انجام بدیم!!!

    خوب ، چی داشتیم می گفتیم؟ اهان! باید آبجکت هایی رو که کارمون باهاشون تموم شده حذف کنیم.
    وسطای همین درس با دستورهای removeChild و removeChildAt آشنا شدیم و گفتیم این دستورا آبجکت رو از لیست نمایش حذف می کنن. اما باید توجه کنید که این دستورا آبجکت رو فقط از لیست نمایش حذف می کنن ولی اون آبجکت رو از حافظه موقت RAM حذف نمی کنن. برای اینکار باید خودمون دست به کار بشیم.
    خیلی خیلی راحته فقط کافیه اون آبجکت رو مساوی با null قرار بدیم.
    کد زیر رو ببینید تا همه چیز رو متوجه بشین
    [​IMG]

    هیچ نیازی به توضیح احساس نمی کنم. همه چیز روشنه عین روز!!!
    دیگه فکر میکنم برای این جلسه کافیه. با این حساب یه جلسه دیگه تا اتمام فصل displaylist باقی می مونه که ایشالله تا یکشنبه اونم آماده می کنم تا هر چه زودتر بریم سراغ فصل مربوط به شی گرایی (opp)
     

    پیوست ها:

    • addChild.zip
      اندازه فایل:
      کیلوبایت 13.9
      نمایش ها:
      509
    • addChildAt.zip
      اندازه فایل:
      کیلوبایت 4.5
      نمایش ها:
      499
    • removeChildAt.zip
      اندازه فایل:
      کیلوبایت 4.6
      نمایش ها:
      499
    آخرین ویرایش: ‏7 آگوست 2009
    نوشته شده توسط sizanjavad در ‏7 آگوست 2009
    mohandesejavan، mehdimdh، wgolzar و 26 نفر دیگر از این ارسال تشکر کرده اند.
  20. sizanjavad

    sizanjavad کاربر فعال

    ارسال‌ها:
    242
    تشکر شده:
    1,449
    امتیاز دستاورد:
    93
    آموزش اكشن اسكريپت3 - درس نوزدهم

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

    به امید خدا دیگه با درس امروز بحث displaylist رو تموم می کنیم و یه مدتی از خدمتتون مرخص میشیم. چون قرار فصلا شی گرایی رو دوست خوبم "hadimetal " در خدمتتون باشه.

    مدیریت نام آبجکت ها و ویژگی های آنها

    هرچی که لیست نمایش ما بزرگتر میشه قاعدتا باید بتونیم مدیریت خوبی رو اشیا و آبجکتها داخل اون داشته باشیم وگرنه بعد از یه مدتی لیست نمایشمون میشه بازار شام:shock:
    پیرو همین موضوع مباحث زیر مطرح میشن.

    پیدا کردن فرزندان بوسیله موقعیت آنها و اسم آنها

    پیدا کردن یه فرزند به وسیله موقعیت اون خیلی سادست. یه چیزی تو مایه های اضافه سازی و حذف فرزند به لیسته. مثال زیر رو ببینید . تو این مثال فرزند سطح صفر از container رو انتخاب میکنه
    [​IMG]

    همونطور که می بینید متغیر do از جنس DisplayObject رو تعریف میکنه. و داخل اون آبجکت سطح صفر لیست رو قرار میده.

    خوب، ممکنه یکی بگه اگه ما موقعیت یه شی رو ندونیم باید چیکار کنیم؟:-?
    بوسیله کد زیر می تونیم بوسیله نام اون آبجکت رو انتخاب کنیم.
    [​IMG]

    تو این مثال ما یه آبجکت به نام circle رو تو آبجکت do قرار میدیم.

    حالا مساله رو یه مقدار قشنگتر می کنیم. یه موقعی ممکنه ما بخوایم بوسیله اسم یه آبجکت موقعیت اون در لیست رو بدست بیاریم. کد زیر چاره کار ماست
    [​IMG]

    casting برای شی displayobject

    casting یعنی قالب ریزی کردن. حالا ببینیم چه دخلی به displayobject داره؟
    بذارین یه مثال بزنیم تا قضیه روشن تر بشه.
    فرض کنین ما یه مووی کلیپ داریم که در سطح صفر وجود داره. حالا از داخل این مووی کلیپ می خوایم به main بگیم برو به فریم 20.
    اولین چیزی که به ذهنمون می رسه کد زیره
    [​IMG]

    ولی اینجاست که مشکل پیش میاد. error زیر ماحصل اونه.
    PHP:
    Call to a possibly undefined method gotoAndStop through a reference
    with static type flash.display:DisplayObjectContainer.

    مشکل از کجاست؟
    مشکل اینه که خود فلش نمی تونه نوع رو تشخیص بده. خوب همونطور که تو نمودار درختی displaylist (جلسه دوم) دیدم parent در اینجا lمی تونه stage هم باشه. ولی مگه stage میتونه بره به فریم 20؟ اصلا تابع gotoAndStop مال stage نیست.
    اینجاست که فلش گرخیجه :D میگیره و نمی تونه تصمیم بگیره.
    و اینجاست که casting به درد میخوره. بوسیله کد زیر ما به فلش پلیر میگیم که نوع parent ما از نوع MovieClip هست. یعنی منظور مورد نظر ما main timeline هست.
    [​IMG]

    نکته: یادم نیست که parent رو تو درسای قبل گفتم یا نه. parent میگه که یه سطح از سطح مووی کلیپ بر. بالاتر. یعنی اگه الان مووی کلیپ سطح پنجه بر سطح 4.

    مدیریت عمق (Depth Management)

    موقعی که به وسیله addChild به یه لیست نمایش آبجکت اضافه می کنیم به صورت اتوماتیم اون آبجکت به انتهای لیست اضافه میشه .
    مثال زیر رو ببینین.
    [​IMG]

    در ابتندا mc1 رو به لیست اضافه می کنیم و بعدشmc2 رو موقعی که trace می گیریم، mc1 در سطح صفر و mc2 در سطح یک قرار داره.
    حالا دومرتبه mc1 رو add می کنیم و trace می گیریم. می بینید که سطوح عوض میشه.
    [​IMG]

    حالا اگه بخوایم جای دوتا آبجکت موجود تو لیست نمایشمون رو با هم عوض کنیم(عمقشون رو) قطعه کد زیر کفایت می کنه
    [​IMG]

    عوض کردن عمق دو تا آبجکت با توجه به سطحشون هم به این صورته
    [​IMG]

    یه روش دیگه هم برای جابجایی عمق آبجکتها وجود داره که از دوتای قبلی خیلی کاربردی تره. پس تو یه مثال این روش رو شرح می دیم
    [​IMG]

    چهار تا فولدر داریم که می خوایم موس رو هرکدومشون رفت بیاد روی همه قرار بگیره. این کار قاعدتا باید با مدیریت عمق صورت بگیره.
    فایلش رو پیوست کردم. کدش رو هم اینجا می ذارم.
    [​IMG]

    تو این مثال folder رو از جنس مووی کلیپ تعریف می کنیم و داخلش evt.target رو که همون فولدریه که روش کلیلک کردیم رو می ریزیم

    سوال: چرا جلوی evt.target صراحتا گفتیم که نوع اون مووی کلیپه؟
    جواب: همون عمل casting هست دیگه. دلیلشم که تو بخش casting گفتم.

    تو خط آخر هم بوسیله setChildIndex میگیم که فولدری رو که روش کلیک می کنیم رو بیار روی همه فولدرا.
    شیوه کارشم اینه که ، تعداد فرزندان رو بدست میاریم(در اینجا 4 تا).بالاترین سطح ، یکی کمتر از تعداد فرزندانه(اینجا سطح 3 بالاترینه). چون سطوح از صفر شروع میشن(مثل آرایه ها) . یعنی 4 فرزند ما به ترتیب در سطوح 0و1و2و 3 خواهند بود.
    بنابراین با کد خط آخر ما فولدر کلیک شده(folder) رو به بالاترین سطح(اینجا سطح3) می فرستیم.

    نکته: این بحث آخر (مدیریت عمق) خیلی مهمه! در ادمه که با اکشن بیشتر کار کنین یکی از مباحثیه که خیلی باهاش درگیر خواهید بود.


    خوب. این درس و کلا این فصل هم تموم شد. فعلا از حضور دوستان مرخص میشم تا آقا هادی کارش رو شروع کنه.

    فقط چند تا نکته می مونه که باید عرض کنم:

    1- در اولین فرصت پی دی اف این فصل رو هم اماده می کنم می ذارم.
    2- قرار بود که بازی خرگوش رو در انتهای این فصل کامل کنیم که دیگه وقت نمیشه. ایشالله فصل شی گرایی که تموم شد. بازی رو شی گرا می نویسیمش به کمک هم.
    3- آقا هادی فصل شی گرایی رو که تموم کرد من با فصل کار با تایم لاین در خدمتتون خواهم بود.
     

    پیوست ها:

    نوشته شده توسط sizanjavad در ‏10 آگوست 2009
    mohandesejavan، mehdimdh، DatFreeman و 21 نفر دیگر از این ارسال تشکر کرده اند.
وضعیت موضوع:
موضوع بسته شده است.

به اشتراک بگذارید