المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : جولة حول أكشن سكريبت 3 الخصائص الأحداث و الوسائل


azizsoft
29-09-2013, 05:44 PM
بسم الله الرحمن الرحيم
الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين
السلام عليكم ورحمة الله وبركاته



يتضمن فلاش عديد الكلاسات التي تحتوي على خصائص (properties) يمكن تعديلها والتحكم
فيها بواسطة أوامر أكشن سكريبت و أساليب (methods) تؤدي مهاما معينة عند استدعائها أو طلبها
وتستجيب هاته الكائنات للآوامر المطلوبة منها عن طريق مختلف الأحداث (Events)



الخصائص : Properties


هى كل المتغيرات التي تميز الكائن كالأحداثيات , اللون ودرجة الشفافية الدوران إلى آخره ولك الحرية في ادراج
القيم التي تراها مناسبة حسب مشروعك لأي كائن معين .. سنوضح في المثال التالي من خلال هذا الجدول لــ مقطع فلم =
موفي كليب باسم " box " بعض الخصائص ولاحظ أخي الكريم خصائص
الموفي كليب والقيم المدرجة

خصائص الموفي كليب box

http://im33.gulfup.com/wQbLp.png

في هذه الصورة تطبيق لبعض القيم box

http://im31.gulfup.com/gPxRb.png

يمكن طبعا أن نقوم بتخزين قيم هاته الخصائص أو تتبعها وتطبيقها على كائنات أخرى بسهولة.


trace(box.alpha);
var bAlpha:Number = box.alpha;





الأحداث: Events



الأحداث هي كل ما يستطيع الكائن الإستجابة له . يستجيب الكائن إما للأحداث من قبل المستخدم، مثل
الضغط على مفتاح من لوحة المفاتيح أو النقر على زر الفأرة , أو أحداث داخل الفيلم , والتي تعتمد على
الخط الزمني أو عامل وقتي مثل المؤقتات Timer .
هناك ما يسمي بدالة انتظار حدث Event Listener وهي ببساطة دالة يتم إدراجها في قائمة انتظار
لتنُفذ عند وقوع حدث ما وتسمى أيضا بدالة التوجيه Handler لأنها ستوجه البرنامج لخطوات عمل
شيء معين عند وقوع هذا الحدث على سبيل المثال عند النقر على زر الفارة .
يوجد أيضا ما يُسمى بمستقبل الحدث Event Target وهو ببساطة عبارة عن اي كائن سوف يستقبل
الحدث . فمثلا ا عند النقر على رمز من الرموز مثل الموفي كليب , في هذه الحالة عملية النقر تمثل الحدث
والموفي كليب يمثل مستقبل الحدث . لكل مستقبل حدث قائمة انتظار خاصة به تستطيع ببساطة أن تدرج
ما تشاء من دوال انتظار في هذه القائمة . وتجدر الإشارة أن أهم كلاس في هذا الجزء هو كلاس
EventDispatcher المسؤول عن إعطاء الضوء الأخضر لتنفيذ جميع دوال الانتظار


دون إطالة في الكلام نمر الى شرح هذا الجزء بالأكواد :



أحداث الماوس


نفتح برنامج الفلاش ونضيف زر بالمسرح باسم rotate_right_btn ونضيف أيضا مربع نحوله الى
موفي كليب باسم box اضف طبقة ثانية للاكشن انسخ الكود والصقه وقم بالمعاينة .
* بالنسبة الى الزر ربطناه بحدث استماع .addEventListener من نوع أحداث الماوس وهو هنا
حدث النقر ثم واسم الوظيفة المطلوب تنفيذها وتتعلق بأمر دوران بمقدار 02 درجة للموفي وسميناها
onRotateRight


rotate_right_btn.addEventListener(MouseEvent.MOUSE _DOWN,onRotateRight);
function onRotateRight(evt:MouseEvent):void {
box.rotation += 20;
}




شرح بطريقة أخرى


نقوم بتحديد اسم الكائن الذي سينفذ عملية معينة وهو هنا = الزر rotate_right_btn وأضفنا له حدث
استماع addEventListener() وتستقبل هاته الوسيلة معاملين الأول نوع الحدث المراد الاستماع اليه
والثاني الوظيفة التي يجب تنفيذها في صورة تحقق الحدث المطلوب والحدث هنا هو" النقر بالماوس "
فوق الكائن box وبالتالي يتم تنفيذ أمر دوران الموفي بالقيمة المطلوبة box.rotation += 20 ;



في المثال التالي سنتعرف أكثر على بعض أحداث الماوس وسنحاول استخلاص ما هو مفيد


افتح برنامج الفلاش ارسم مربع صغير وحوله الى موفي كليب باسم myMovieClip أضف طبقة ثانية
خاصة بالاكشن انسخ الكود والصقه قم بالمعاينة ستلاحظ أنك بواسطة الماوس تستطيع أن تسحب هذا
الكائن الى أي مكان من المسرح ولما تفلت الماوس يتحرر الكائن من الحدث الأول ولاحظ في الكود
وظيفتي بداية السحب وإيقاف السحب .


myMovieClip.addEventListener(MouseEvent.MOUSE_DOWN , onStartDrag);
myMovieClip.addEventListener(MouseEvent.MOUSE_UP, onStopDrag);
function onStartDrag(evt:MouseEvent):void {
evt.target.startDrag();
}
function onStopDrag(evt:MouseEvent):void {
evt.target.stopDrag();
}


الان افتح المكتبة اسحب نسخة من الموفي كليب واعطه اسم myMovieClip2 حدد طبقة الأكشن
انسخ الان السطرين الأولين من الكود والصقهما تحتهما ليصبح الكود بالشكل النهائي:


myMovieClip.addEventListener(MouseEvent.MOUSE_DOWN , onStartDrag);
myMovieClip.addEventListener(MouseEvent.MOUSE_UP, onStopDrag);
myMovieClip2.addEventListener(MouseEvent.MOUSE_DOW N, onStartDrag);
myMovieClip2.addEventListener(MouseEvent.MOUSE_UP, onStopDrag);
function onStartDrag(evt:MouseEvent):void {
evt.target.startDrag();
}
function onStopDrag(evt:MouseEvent):void {
evt.target.stopDrag();
}



لاحظ معي أخي الكريم أن الخاصية target في الكود عوضت myMovieClip وبالتالي فهي تمثل
أي كائن مستقبل لحدث الماوس وهنا نقر الماوس وافلات الماوس . وهذه الخاصية جميلة وهي بمثابة
اختصار لكتابة اكواد اكثر تخص الكائنات بالمسرح .وهي شبيهة بالدالة this بمعنى أنه اذا كررت
العملية يعني تسحب موفي ثالث وتعطه اسم myMovieClip3 وتنسخ وتلصق تفس السطرين مع
إضافة رقم 3 للموفي يتم تطبيق حدث الماوس السحب والافلات على الجميع ويمكن طبعا اتباع نفس
الطريقة مع أزرار أواي تطبيقات مشابهة .



ندرج مثال اخر



افتح برنامج الفلاش ارسم مربع حوله الى موفي كليب واعطه اسم box في نفس الطبقة ارسم مستطيل
بلون اخر وحوله الى زر واعطه اسم move_left_btn الان اسحب من المكتبه نسخة من الزر واعطه اسم
move_right_btn اسحب نسخة ثالثة من الزر واعطها اسم move_up_btn اسحب نسخة رابعة واعطها اسم
move_down_btn اضف طبقة خاصة بالاكشن الصق الكود التالي وفيها وقم بالمعاينة



function onMoveLeft(evt:MouseEvent):void {
box.x -= 20;
}
function onMoveRight(evt:MouseEvent):void {
box.x += 20;
}
function onMoveUp(evt:MouseEvent):void {
box.y -= 20;
}
function onMoveDown(evt:MouseEvent):void {
box.y += 20;
}
move_left_btn.addEventListener(MouseEvent.MOUSE_UP , onMoveLeft);
move_right_btn.addEventListener(MouseEvent.MOUSE_U P, onMoveRight);
move_up_btn.addEventListener(MouseEvent.MOUSE_UP, onMoveUp);
move_down_btn.addEventListener(MouseEvent.MOUSE_UP , onMoveDown);



هل خطرت لك فكرة بسيطة من هذا المثال ؟؟؟ فكر معي نعم يمكن بهذا المثال البسيط أن تنجز لعبة بسيطة
يعني تنجز خلفية بها مسار في جميع الاتجاهات وتحتوي نقطة هدف وعند وصول الموفي كليب الى النقطة الهدف
يختفي الموفي وتبرز للمستخدم مثلا صوت رصيد تتواصل اللعبة وهكذا .المثال يطبق أيضا من خلال الضغط على
اسهم لوحة المفاتيح لكن الكود يختلف وهذا مثال على السريع وادرجت ارقام الأسهم الأربعة للوحة المفاتيح فقط


أحداث لوحة المفاتيح



طيب اخذف كل الاكواد السابقة اترك الموفي كليب فقط واضف نص ديناميكي واعطه اسم dt_txt ثم الصق الكود
التالي بطبقة الاكشن وعاين استعمل الأسهم الأربعة للوحة المفاتيح فقط .



stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress);
function onKeyPress(e:KeyboardEvent):void {
if(e.keyCode == 37){ //37 السهم الايسر
box.x -= 20;
dt_txt.text = "يسار ";
}
if(e.keyCode == 39){ //39 السهم الايمن
box.x += 2
dt_txt.text = "يمين ";
}
if(e.keyCode == 38){ //38 السهم الأعلى
box.y -= 20;
dt_txt.text = "أعلى ";
}
if(e.keyCode == 40){ //40 السهم الأسفل
box.y += 20;
dt_txt.text = "أسفل ";
}
}



الصورة التالية توضح أرقام أزرار لوحة المفاتيح


http://im42.gulfup.com/aGYAo.png



أحداث التايمر Timer



يعتبر كلاس التايمر Timer من أهم الكلاسات في اكشن سكريبت خصوصا أنه يمكن اعتماد وظائفه في
تطبيقات كثيرة لاسيما الألعاب والمسابقات الى غير ذلك ويصعب شرح كل جزئية في هذا الجانب لكن
يمكن أخي الكريم اذا فكرت مثلا في إضافة الجمل الشرطية الى التايمر وربط وقت معين بشرط معين
ستتضح لك أفكارعديدة في انشاء تطبيقات جميلة .
المهم في المثال التالي البسيط سنشرح طريقة استعمال التامير وربطه مثلا بتنفيذ أمر على أحد العناصر
من نوع موفي كليب .
افتح برنامج الفلاش في الطبقة الأولى اضف مربع أو نجمة وحوله الى موفي كليب واعطه اسم box
في نفس الطبقة ارسم مستطيل صغير حوله الى زر واعطه اسم start_btn افتح المكتبة اسحب نسخة
من هذا الزر الى المسرح بجانب الأول واعطه اسم stop_btn الان اضف طبقة ثانية خاصة بالاكشن
انسخ الكود والصقه وعاين الملف .



var myTimer:Timer = new Timer(1000);
myTimer.addEventListener(TimerEvent.TIMER, timel);
function timel(e:TimerEvent):void{
box.rotation+=20;
}
start_btn.addEventListener(MouseEvent.CLICK, onStart);
function onStart(e:MouseEvent):void{
myTimer.start();
}
stop_btn.addEventListener(MouseEvent.CLICK, onStop);
function onStop(e:MouseEvent):void{
myTimer.stop();




نلاحظ أننا بواسطة كلاس التايمر ووظائفه نستطيع أن نقوم بعدة تطبيقات على العناصر



الأليات : Methods



ببساطة هي آليات مسؤؤولة على تنفيذ الأوامر وهي واليات ووظائف جاهزة مهمتها تنفيذ أمر مطلوب وأغلب كلاسات
الاكشن سكريبت تحتوي على عديد الأليات على سبيل المثال الدالة stop(); والدالة play(); الى غير ذلك من الأوامر
البرمجية الجاهزة .


أستودعكم الله

abohmam
29-09-2013, 10:28 PM
جزاك الله خيرا أخانا الفاضل عزيز

مازلنا متابعين إبداعاتك ياطيب :abc_022:

بارك الله في جهودك

azizsoft
29-09-2013, 10:59 PM
بسم الله الرحمن الرحيم

مرحبا أستاذ أبو همام
أشكر لكم حضوركم المتواصل

وفقكم الله

أبو يوسف
30-09-2013, 09:59 AM
جزاكم الله خيرا اخانا :abc_152: وبارك الله فيك .

شرح سهل وواضح

خادم المسلمين
30-09-2013, 03:04 PM
اعذرنى فى التأخر اخى عزيز

وجارى قراءة الدرسين الجداد والتطبيق عليهم ان شاء الله

لكن اتمنى كتابة تعليقات ادام كل سطر برمجى كترجمة لمعنى الكود

وشكرا

خادم المسلمين
02-10-2013, 05:18 PM
اخى عزيز طبقت الشرح وماشى معايا زى الفل

ولكن عند تطبيق التايمر

يعطينى رسالة خطأ

Scene 1, Layer 'Layer 1', Frame 1 1084: Syntax error: expecting rightbrace before end of program.


فزودت هذه العلامة

{
فى نهاية الكود ومشت


وبمناسشبة انك


تعرضت لهذه النقطة

فانها موجودة فى افتتاحية اسطوانة نور البيان
الاصدار الجديد لاسطوانة نور البيان ولعام2013 "بحجم 455 ميجا" (http://www.abc4web.net/vb/showthread.php?t=27702)
حيث عمد المصمم او المبرمج

لان تكون عناوين الدرس
موفيهات تتحرك كلها بشكل دائرى يتبع بعضها بعضا
بحيث عن الضغط على زر معين يوقف دوران الايقونات
وعند الضغط عليه مرة اخرىيتم تشغيل دوران الايقونات لاختار عنوان درس اخر

هذه نقطة ارجوا منك توضيحها بالاكواد ويا ريت ملف مفتوح
ما يهمنى اكثر فيها اننى اريد جعل دوران الايقونات يتسع بحيث يشمل ساحة المشهد كله
بدون خروج عنه ولا تزاحم بينها
منتظر ردك

الهمام
05-10-2013, 01:10 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .