X
تبلیغات
رایتل
پشم سنگ عایق الاستومری
یکشنبه 10 تیر‌ماه سال 1386
توسط: آلفا پک

اکشن نویسی در فلش

دوستان امروز داشتم گشت می زدم یه وبلاگ با حال دیدم که یه آموزش خوب و مختصری در مورد اکشن نویسی در فلاش داشت گفتم بزارم تو وبلاگ وادرسش هم اینه : www.flashmx.blogfa.com

 

 

متغیر های رشته ای ، عددی و بولین و نال

رشته چیست ؟

رشته مجموعه ای از کاراکتر هاست که در کنار هم قرار گرفته اند و میتواند شامل حروف و اعداد و کاراکتر های نقطه گذاری باشند . برای نوشتن رشته ها باید آنها را در میان کوتیشن قرار داد. مثلا : “Mediax”

شما میتوانید از عملگر + جهت متصل کردن دو رشته به هم استفاده کنید . اکشن اسکریپت فاصله ها را در ابتدا یا انتهای رشته ها جزو رشته به حساب می آورد . یعنی هر فاصله دقیقا مانند یک کاراکتر از رشته است . گر چه در اکشن اسکریپت متغیر ها ، نام اشیاء و لیبل فریم ها حساس به بزرگی یا کوچی حروف نیستند ، اما در مورد رشته ها این خاصیت برقرار است .در مثال زیر جملات نوشته شده خروجی های گوناگونی را نشان میدهند . چون دو لغت “macro”و “MACRO” دو رشته واقعی هستند :

invoice.display = "macro";

invoice.display = "MACRO";

 

برای نشان دادن کوتیشن در یک رشته ، باید قبل از آن یک کاراکتر بک اسلش بگذارید . به اینکار میگویند فرار (Escaping) کاراکتر . کاراکترهای دیگری هم هستند که در اکشن اسکریپت نشان داده نمیشوند مگر اینکه از روش های فرار کاراکتر خاص آنها استفاده کنید . جدول زیر تمامی کاراکتر های استفاده برای فرار یک کاراکتر را نشان میدهد :

Escape sequence             Character

                                     Backspace character (ASCII 8)

f                                       Form-feed character (ASCII 12)

                                      Line-feed character (ASCII 10)

                                      Carriage return character (ASCII 13)

                                      Tab character (ASCII 9)

"                                      Double quotation mark

'                                       Single quotation mark

\                                      Backslash

00 - 377                         A byte specified in octal

x00 - xFF                         A byte specified in hexadecimal

u0000 - uFFFF                  A 16-bit Unicode character specified in hexadecimal

 

اعداد :

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

+  جمع

-  تفریق

*  ضرب

/  تقسیم

%  به پیمانه

++  افزایش

ـ ـ  کاهش

  • توجه : ++ جهت افزودن یک واحد به یک متغیر عددی کاربرد دارد  . بیشترین استفاده از آن نوشتن i++ بجای i=i+1 میباشد . این عملگر هم قبل و هم بعد از نام متغیر عددی استفاده میشود . در مثال زیر متغیر age ابتدا یک واحد اضافه شده و سپس با عدد 30 چک میشود .

if (++age >= 30)

اما در مثال زیر age بعد از انجام عمل مقایسه اضافه میشود .

if (age++ >= 30)

 

همچنین میتوانید از متد های آماده آبجکت ریاضی اکشن اسکریپت برای دستکاری اعداد استفاده کنید . در مثال زیر ازمتد sqrt جهت جذر گرفتن از عدد داده شده استفاده کرده ایم :

Math.sqrt(100);

 

نوع داده بولین :

یک مقدار بولین مقداریست که دو حالت بیشتر نداره  ، یا true یا false . اکشن اسکریپت این دو مقدار را به دو مقدار 1 و 0 نیز تبدیل میکند . مقادیر بولین معمولا با عملگر های منطقی در جملات اکشن اسکریپت استفاده میشوند که باعث انجام مقایسه ای برای اجرای کد بعدی میشود . بطور مثال در کد زیر فیلم در صورتی اجرا میشود که متغیر Password مقدارش true  باشد .

onClipEvent(enterFrame) {

               if (userName == true && password == true){

                               play();

               }

}

 

نوع داده تهیNULL) ) :

این نوع داده فقط یک مقدار دارد و آنهم NULL است به معنای پوچ ، یعنی هیچ داده ای وجود ندارد. این نوع داده برای تفاوت قائل شدن بین وضعیت های گوناگون کاربرد دارد .  چند مثال :

  • برای اینکه نشون بده هنوز یک متغیر مقدار دهی نشده یا اینکه در این لحظه هیچ مقداری نداره .
  • برای هنگامی که میخواهید در یک فانکشن مقدارش را چک کنید تا در صورت وجود ارسال شود .
  • و ...

 

نوع داده ای تعریف نشده ( Undefined) :

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

 

کنترل در زمان اجرا

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

اسکریپت هایی که به مووی کلیپ یا دکمه ها نسبت داده شده اند زمانی اجرا میشوند که رویداد (event) خواسته شده اتفاق افتد . یک رویداد یک اتفاقی است که توسط کاربر یا گاهی توسط فیلم فلش شما اتفاق می افتد ، مانند کلیک کردن موس ، فشردن یک دکمه از کیبورد ، و یا لود شدن یک مووی کلیپ ( این آخری توسط فیلم اتفاق افتاده) . شما میتوانید بر اساس رویداد هایی که رخ میدهد کد های متفاوتی بنویسید تا در هنگام رخ دادن هر رویداد یک کد خاص اجرا گردد .

اکشن هایی که به دکمه ها یا مووی کلیپ ها نسبت میدهید در اکشن های خاصی بنام Handler حبث میشوند .on  و onClipEvent دوHandler  هستند . شما میتوانید یک یا بیش از یک Event را در یک Handler قرار دهید و همچنین میتوانید بیش از یک Handler برای هر شیئ قرار دهید . هندلر onClipEvent برای مووی کلیپ و هندلر on برای دکمه هاست . همچنین شما میتوانید از on برای خلق مووی کلیپ دکمه ای استفاده کنید که رویداد های دکمه را دریافت میکند .

رویداد های مووی کلیپ و دکمه ها میتوانند توسط متد های خود شیئ نیز بکار گرفته شوند . شما باید یک فانکشن تعریف کنید و آن را به متد Event Hadler ارجاع دهید . این فانکشن وقتی که رویداد اتفاق بیافتد اجرا میشود .

جدول زیر متد ها و Event Handler های دکمه ها را نشان میدهد :

Event handler actions     Event handler methods

on (press)                          onPress

on (release)                       onRelease

on (releaseOutside)            onReleaseOutside

on (rollOver)                      onRollOver

on (rollOut)                        onRollOut

on (dragOver)                    onDragOver

on (dragOut)                      onDragOuot

on (keyPress"...")                onKeyDown, onKeyUp

 

جدول زیر متد ها و Event Handler های مووی کلیپ ها را نشان میدهد :

Event handler actions     Event handler methods

onClipEvent (load)              onLoad

onClipEvent (unload)           onUnload

onClipEvent (enterFrame)    onEnterFrame

onClipEvent (mouseDown)   onMouseDown

onClipEvent (mouseUp)       onMouseUp

onClipEvent (mouseMove)   onMouseMove

onClipEvent (keyDown)        onKeyDown

onClipEvent (keyUp)            onKeyUp

onClipEvent (data)              onData

 

با اکشن اسکریپت همچنین میتوانید رویداد های TEXTbox و دیگر اشیاء اکشن اسکریپت را کنترل کنید .

متغیر ها در فلش

متغیر چیست ؟

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

یک ایده خوب در بکار گیری متغیر ها اینه که همون اول که متغیر را تعریف میکنیم یه مقدار اولیه بهش بدیم . به اینکار میگویند initialize کردن . اینکار را معمولا در فریم اول انجام میدن .

متغیر ها میتوانند انواع مختلفی از اطلاعات را در خود نگه دارند مانند اعداد ، رشته ها ، مقادیر بولین ، آبجکت ها یا مووی کلیپ ها .

نام گذاری متغیر ها :

نام یک متغیر از قوانین زیر پیروی میکند :

  • باید اسم آن نشان دهنده نوع آن باشد .
  • نام متغیر نمیتواند از بین keyword های اکشن اسکریپت باشد . همچنین نمیتواند از کلمات تعیین کننده مانند true , false , null و  undefiend باشد.
  • نام متغیر باید در محیط خودش یکتا باشد .

 

مقدار دهی متغیر :

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

X = 3 ;

در عبارت فوق ، فلش داده سمت راست مساوی را تعیین هویت میکند و میفهمد که نوع آن عدد است . یک مقدار دهی دیگر میتواند نوع x را عوض کند . مثلا x = “hello”;  مقدار x   را به نوع رشته ای تغییر میدهد . متغیری که هنوز هیچ داده ای به آن نداده ایم نوع undefiend  دارد .

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

"Next in line, number " + 7

 

پس از تبدیل جواب جمع رشته بصورت زیر در میاید :

"Next in line, number 7"

 وقتی شما اسکریپت هایتان را اشکال زدایی میکنید نگاهی به نوع متغیرها بیندازید.

کد زیر نوع متغیر را اعلام میکند

trace(typeof(نام متغیر));

 

قلمرو یک متغیر :

قلمرو یک متغیر به محدوده ای میگویند که آن متغیر در آن شناسایی میشود و میتوان به آن دسترسی داشت . سه نوع قلمرو برای متغیر ها در اکشن اسکریپت موجود است .

  • متغیر های local (محلی) : این متغیرهادر بلوک کد خودشان قابل دسترسی هستند (که بلوک کد آنها با آکولاد محصور میشود) .
  • متغیر های Timeline : که در هر تایم لاینی که از  Target path استفاده کنید قابل دسترسی هستند .
  • متغیر های  عمومی (global) : که در هر تایم لاینی قابل دسترسی است . حتی اگر از target path  استفاده نکرده باشید .

 

برای اعلام کردن یک متغیر(declare) میتوانید از عبارت var استفاده کنید . بطور مثال متغیر های j  و i معمولا برای استفالده در حلقه ها استفاده میشوند (البته هر اسمی میشه گذاشت ، فکر نکنی اسمش چیز خاصی داره ها .. اما خوب برنامه نویسا به یه سری اسامی عادت کردن دیگه) .

در کد زیر i به عنوان یک متغیر محلیبگار رفته که فقط در فانکشن makedays وجود دارد .

function makeDays() {

               var i;

               for( i = 0; i < monthArray[month]; i++ ) {

                               _root.Days.attachMovie( "DayDisplay", i, i + 2000 );

                               _root.Days[i].num = i + 1;

                               _root.Days[i]._x = column * _root.Days[i]._width;

                               _root.Days[i]._y = row * _root.Days[i]._height;

                               column = column + 1;

                               if (column == 7 ) {

                                              column = 0;

                                              row = row + 1;

                               }

               }

}

 

اعلام کردن یا مقدار دهی متغیر (declaration):

  • برای دیکلر کردن متغیر های تایم لاین ، از اکشن set variable استفاده میشود و یا از عملگر مساوی . هر دو متد یک کار را انجام میدهند .
  • برای دیکلر کردن متغیر های محلی از عبارت var در داخل فانکشن ها استفاده میشود . یک متغیر محلی در بلوک فانکشن محصور است و با رسیدن کد به خط پایانی فانکشن ، متغیر محلی (اصطلاحا) میمیرد . متغیر محلی ای که در داخل بلوک نباشد با رسیدن به پایان اسکریپتش می میرد .
  • برای دکلر کردن متغیر های عمومی (global  ) از عبارت _global قبل از اسم متغیر استفاده میشود. کدی که مشاهده میکنید یک متغیر عمومی بنام myname میسازد :

_global.myName = "SHARAFI";

 

استفاده از یک متغیر :

به مثال زیر توجه کنید :

getURL(myWebSite);

myWebSite = "http://www.macromediax.net";

 

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

 

یک مثال دیگر : در مثال زیر  x  مقدار 15 گرفته و سپس مقدارش در Y کپی شده . در خط سوم مقدار x  مساوی با 30 شده است  . اما مقدار Y همان 15 میماند . چون Y  مقدارش را از X کپی گرفته و دیگر کاری به کار هم ندارند .

var x = 15;

var y = x;

var x = 30;

استفاده از عملگرها برای دستکاری مقادیر عبارت ها

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

 

انواع عملگر ها در فلش :

1-      عملگر های عددی

2-      عملگر های مقایسه ای

3-      عملگر های رشته ای

4-      عملگر های منطقی

5-      عملگر های Bitwise برای اعداد شناور

6-      عملگر های تساوی

7-      عملگر های انتقالی

8-      عملگر های دسترسی آرایه و نقطه

 

1 - عملگر های عددی :

کارشان جمع و تفریق و ضرب و تقسیم است ، بیشترین کاربرد عملگر افزایشگر ، استفاده i++ بجای i = i+1 است . عملگر افزایشگر هم قبل و هم بعد از متغیر ها میتواند بیاید . با یک مثال فرق آنها را متوجه میشوید :

if (++age >= 30)

در مثال فوق ابتدا  Age افزایش یافته و سپس مقایسه صورت میگیرد .

if (age++ >= 30)

در مثال دوم ابتدا مقایسه صورت میگیرد و سپس Age افزایش میابد .

 

عملگر                کار عملگر

+                      جمع

*                      ضرب

/                      تقسیم

%                      Mod (باقیمانده تقسیم)

-                      تفریق

++                   افزایش

--                   کاهش

2 - عملگر های مقایسه ای :

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

عملگر            کار عملگر

<                  کوچک تر از

>                  بزرگتر از

<=               کوچکتر مساوی

>=               بزرگتر مساوی

3 - عملگر های رشته ای :

عملگر + یک حالت خاص را روی رشته ها انجام میدهد و آن متصل کردن رشته ها به یکدیگر میباشد .  مثالی برای جمع دو رشته :

"Congratulations, " + "Donna!"

نتیجه بصورت زیر در می آید :

"Congratulations, Donna!"

 

۴ - عملگر های منطقی:

این عملگر ها مقادیر بولین را با هم مقایسه میکنند و یک مقدار بولین بعنوان جواب پس میدهند .

بطور مثال اگر هر دو مقدار داده شده به عملگر and مقدار true باشد جواب نهایی and مقدار true خواهد بود ،عملگر OR زمانی مقدارش true میشود که حداقل یکی از مقادیر داده شده به آن true باشد . عملگر not  یک مقدار را میگیرد و اگر آن مقدار درست نباشد (یعنی false باشد ) آنگاه مقدار not برابر با true میشود  . به مثال زیر توجه کنید :

if (i > 10 && _framesloaded > 50){

        play();

}

جدول زیر نمونه های عملگر منطقی را نشان میدهد .

Operator              Operation performed

&&                        Logical AND

||                        Logical OR

!                          Logical NOT

 

اکشن اسکریپت ، یک زبان شیئ گرا

به چه چیز هایی میتوان  Action Script  داد ؟

دکمه ها ، فریم ها و مووی کلیپ ها میتوانند اکشن اسکریپت بگیرند .

  • برای ربط دادن یک کد اسکریپت به فریم باید ابتدا روی فریم موردنظر کلیک کنید و سپس وارد پنل اکشنز شوید و کد های خود را وارد کنید . (توجه کنید که فقط فریم هایی که فریم کلیدی باشند اکشن میپذیرند و اگر روی یه فریم معمولی کلیک کنید که فریم کلیدی نباشد اکشنی که در آن فریم وارد کنید به اولین فریم کلیدی قبل از آن فریم تعلق میگیرد) .
  • برای کد دادن به یک دکمه ، ابتدا روی دکمه کلیک کنید و سپس وارد پنل اکشنز شده و کد موردنظرتان را به آن اضافه کنید .
  • برای کد دادن به مووی کلیپ ها شما در اصل به یک کپی از مووی کلیپ کتابخانه که روی صفحه فلشتان است اسکریپت میدهید و بقیه کپی هایی که از سمبل روی آن کلیپ کتابخانه در صفحه می آورید از آن اسکریپت بهره نمی گیرند.(در صورتی که هنگام ویرایش مووی کلیپ اصلی ، کدی را به یکی از فریم ها یا دکمه های موجود در مووی کلیپ بدهید آن اسکریپت برای سمبل است و تمام کپی هایی که از روی آن میسازید آن کد را دارا هستند). وقتی شما یک اکشن به یک مووی کلیپ میدهید باید اکشن را در یک Event Handler قرار دهید تا در صورت رخ دادن آن Event اکشنی که داده اید اجرا شود .(Event به معنای رویداد است که در تمامی زبان های برنامه نویسی نیز به همین نام مرسوم است . رویداد یعنی رخ دادن یک اتفاق بر روی شیئ مورد نظر . مثلا رد شدن موس از روی مووی کلیپ یک رویداد است و یا کلیک روی آن یا خاتمه یافتن صدایی که به یک فریم اختصاص داده اید.).

اسکریپت نویسی شیئ گرا  :

در اسکریپت نویسی شی گرا ، اطلاعات در گروه های خاصی دسته بندی میشوند که به آنها Class میگویند . شما میتوانید چندین کپی از یک کلاس را در اسکریپت خود بسازید که به هر یک از آنها یک شی (Object) میگوییم . شما میتوانید کلاس های مربوطه را خودتان بسازید و یا از کلاس های آماده فلش در پوشه Objects در پنل اکشنز استفاده کنید.

وقتی شما یک کلاس میسازید ، باید تمامی دارایی ها ( property ) و متد Method های مربوط به هر شی ای را که ساخته اید تعریف کنید. مثلا یک آدم دارای چه دارایی هایی است ؟ چشم ، دست ، مو ، و مانند آن . و دارای چه متد هایی ؟ متد راه رفتن ، خندیدن ، حرف زدن و غیره . در مثال فوق کاراکتر آدم یک کلاس است و هر کپی از روی آن یک شی خواهد بود . اشیاء در اکشن اسکریپت میتوانند اطلاعات یا گرافیک ها را حمل کنند. بطور مثال یک مووی کلیپ در فیلم فلش ما در اصل یک شی از کلاس مووی کلیپی است که در کتابخانه آن فیلم فلش قرار دارد و شامل تمام دارایی ها و متد های شی اصلی است.

 

برای تعریف کردن یک کلاس شما باید یک فانکشن  constructorتعریف کنید بطور مثال اگر شما اطلاعاتی درباره یک دوچرخه سوار در فیلم فلش خود دارید شما میتوانید یک فانکشن از نوع constructor بنام Biker بسازید و برای آن دو پراپرتی زمان و فاصله تعریف کنید و یک متد  Getspeed که این متد سرعت دوچرخه سوار را در هر لحظه که فراخوانی شود میدهد .

function Biker(t, d) {

               this.time = t;

               this.distance = d;

               this.getSpeed = function() {return this.time / this.distance;};    

}

در مثال بالا یک فانکشن ساختیم که دو متغیر برای دریافت اطلاعات بنام های t , d  دارد .وقتی شما این فانکشن را برای ساخت یک کپی از شی آن فراخوانی میکنید باید پارامتر های تعریف شده را نیز بهمراه نام فانکشن وارد کنید . به مثال زیر توجه کنید:

emma = new Biker(30, 5);

hamish = new Biker(40, 5);

 

در کد های بالا دو شیئ biker با نام های emma و hamish ساختیم . همانطور که میبینید بعد از نوشتن نام فانکشن داخل پرانتز پارامتر های تعریف شده را هم نوشته ایم.

 

وراثت در اسکریپت نویسی شیئ گرا :

در اسکریپت نویسی شیئ گرا Class ها میتوانند متد ها و پراپرتی ها را به روش وراثت inheritance از همدیگر دریافت کنند . شما میتوانید وراثت را برای گسترش یا دوباره سازی متد ها و پراپرتی های یک کلاس بکار گیرید . کلاسی که ار کلاس دیگر ارث میبرد Subclass نامیده میشود .(sub به معنای زیر مجموعه است) و کلاسی که متد ها و پراپرتی هایش را به کلاس دیگر پاس میدهد superClass نامیده میشود . یک کلاس میتواند هم Subclass و هم SuperClass  باشد