مشاهدة النسخة كاملة : Action Script Fundamentals part 9


الشهاب الحارق
25 Feb 2002, 10:57 PM
السلام عليكم

Action Script Fundamentals part 9

الجزء الثالث و الأخير من شرح الوظيفة

يقال أن افضل مكان يتم فيه إنشاء الوظيفة هو المشهد الرئيسي للفلم

وذلك لشيئين مهمين أولهما ما يسمى بمحيط الوظيفة حيث المشهد الرئيسي

معني بكل الأفلام سواءً كانت على نفس المشهد أو دخل أفلام أخرى

أي يعني بشكل أصح وظيفة عالمية Global Function

والشيء الثاني هو التنسيق فلو فرضنا أننا عرفنا وظيفة

في فلم فرعي في مشروعنا فإننا سنضطر كلما أردنا مناداة الوظيفة

بكتابة المسار الذي يؤدي بنا إلى تلك الوظيفة مثال _root.myclip.myfunction();

وهذا ليس منطق المبرمجين ولا مذهب المحترفين والمنظمين لأعمالهم على حدٍ سواء .


وعلى الرغم من ذلك فلا مانع لدينا أن نذكر وبشكل مختصر عن محيط الوظائف function scope

وقد ذكرنا للتو أن إذا ما تم تعريف الوظيفة في فلم غير المشهد الرئيسي فإنه لابد أن نقوم بكتابة

مسارها إذا ما أردنا الاستفادة منها وإلا سيكون وجودها دون أدنى فائدة

وقد ضربنا مثالً على ذلك في الأعلى .

المتغير المحلى ومكانتهُ الحساسة في الوظائف

قد تعلم عزيزي القارئ أن المتغيرات في الوظائف تموت بعد ما يصل مترجم فلاش flash compiler

إلى منطقة ال block النهاية بالنسبة للوظيفة ونعني بمنطقة النهاية هو القوس المنحني الذي يقفل الوظيفة }

إلا في حالة واحدة وهذه الحالة تكون في معظم الأحيان خطأ فادح يسبب الكثير من المتاعب وخاصة

المبتدأين الذين لا يفرقون بين المتغير المحلى والعالمي local Variable and Global Variable

الفرق بين المتغير المحلي والمتغير العالمي

المتغير المحلي هو var x = 5; على سبيل المثال لا الحصر وكلمة var هي التي تخبر مترجم فلاش

أن هذا المتغير متغير محلي يموت أو ينتهي بعد انتهاء المترجم من قراءة الوظيفة

الفائدة منه أنه بعد انتهائه أو موته يترك مساحة في الذاكرة مما يوفر أداءً أفضل للجهاز

أما المتغير العالمية فيكون بالشكل التالي x = 5; وما دام أنا لم نكتب قبلهُ الكلمة var فتدل

على أنهُ متغير عالمي Global Variable لا يموت بعد القراءة بل يكون عالة علينا إلى انتهاء البرنامج .
السبب الذي يكون هذا المتغير عالةً علينا

لربما كان لدينا متغير يحمل نفس الاسم في المشهد الرئيسي فسيكون تأثير هذا على

حسب المتغير في الوظيفة وستدخل في دوامة من الاضطراب وذلك لغموض المشكلة

والله في غنى عنها ونحن كذلك .


المنطق يقول

إذا كانت الحاجة إلى متغير يبقى إلى أخر المشروع أو العمل يكون الأفضل استخدام متغير عالمي

مثل حفظ اسم الشخص عند بدء الامتحان أو لعبة والعكس بالعكس

أي متغير يكون فقط لعمل عشوائية ثم ننتهي منه فالمحلي هو الانسب

في هذه الحالة وتذكر أن هذا بالنسبة للوظائف فقط .


أخيراً وظائف كالعناصر Function as Objects

او ما يسمى تمرير وظيفة إلى وظيفة Passing Function to function


حمل الملف تمرير وظيفة إلى وظيفة (http://shihaab.topcities.com/passingfunctiontofunction.fla)

أعطيك مثال صغير والباقي عليك يا عزيزي

مثال ذلك قد تعلم أن الأمر stop() وهو وظيفة و play() وظيفة و ذلك إذا أردت المعرفة كيف؟

الجواب بسيط لقد تعلمنا أن إذا ما أردنا مناداة الوظيفة نناديها بالشكل التالي myfunction();

فالأمر سيان بالنسبة لمناداة وظيفة مدرجة مسبقاً مثل play(); فإننا نستخدم القوسين بعد كتابة

أسم الوظيفة هذا الذي يفسر لنا أن play() ما هي إلا وظيفة مدرجة مسبقاً

نعود إلى ما نحنُ بصددِ وهو تمرير وظيفة إلى وظيفة

التركيبة النصية myfunction(mysecondfunction);


وكعمل حقيقي مثلاً myfunction(Play());

حمل المثال التالي


المشروع الأخير هو كما تعلمون ال jukebox

حمل المشروع الأخير (http://mypage.ayna.com/highspy/ActionScript/jukbox/colorandjukbox.zip)

الذي تم استخدامه في مختبر العرب الثاني

سنقوم الآن بوضع اللمسات الأخيرة علية واستخدام الوظيفة في ذلك

ستكون الوظيفة بالشكل التالي

function playthesong(songNum){

// stop the previous song. if any

song.stop();

// play the song

song = new Sound();

song.attachSound("song"+ songNum);

song.start(0,9999);

}

stop();


اسم الوظيفة playthesong القيمة التي ستمرر في الوظيفة songNum

السطر الأول للوظيفة يقوم بإيقاف أي صوت في حالة تشغيل song.stop();

ما ترى بجانبه خطين مائلين فهو تعليق //

ثم التعريف الأساسي لكل عنصر song = new Sound();

ثم ما يسمى التخاطب المكتبي أي إلصاق الأصوات من المكتبة إلى المشروع

Song.attachSound(“song”+songNum);

وهو يعبر عن الثمانية أصوات الموجودة في المكتبة وهي تبدأ بالشكل هذا

Song1 ,song2 and etc

وبما أن الأصوات يتم تعريفها في هذا العنصر على أنها string identifier

فلابد أن تكون بين علامتي تنصيص يعني المترجم يتعرف على اسم الصوت كأنه نص وليس تعبيري

أو رقمي أو غير ذلك فلا خيار في هذا بالنسبةِ لتعريف الصوت في العنصر

ثم نقول له بعد تعريف الاسم وهو song نستخدم أداة الزيادة أي مع ذلك الصوت أرفق هذا

التعبير وذلك انه لا توجد حوله علامتي تنصيص songNum

وهي تعبر عن رقم الصوت

في الأخير نقول له في هذا الأمر song.start(0,9999);

بأن يقوم بتشغيل الصوت هذا من البداية كونه 0 وإلى 9999 لفه

أي إعادة كلما انتهى يعيد حتى يصل إلى هذا الرقم .


سيكون في الأزرار مناداة الوظيفة بالشكل التالي بالنسبة للزر الأول


on(press) {

playthesong(1);

}

تلاحظ أننا في مناداة الوظيفة فقط كتبت الرقم واحد

أي يعني الأغنية الأولى

والسبب أنه كما ذكرنا في المكتبة لابد أن تكون ملفات الأصوات معنونة بالشكل التالي

الملف الصوتي الأولى song1 الملف الصوتي الثاني song2

قد تعلم أن الصوت لا بد أن يعرف في المكتبة بالضغط عليه بالزر الأيمن

واختيار Linkage ثم نختار Export this symbol ثم نكتب اسم للصوت

لنفترض انك أسميت الملف الصوتي في المكتبة بهذا الاسم during

سيكون طبعاً كتابته في الخانة Identifier ثم OK


في الفريم الأول في المشهد الرئيسي تكتب هذا النص البرمجي

myduring = new Sound();
myduring.attachSound("during");

حيث يتم كل الشغل على المتغير myduring تعلم أن new Sound

هو عنصر الإنشاء الذي لابد أن يبتدأ بكل عنصر بهذه الطريقة المهم

لا أريد أن أخوض في الأمر بشكل اكثر لأنني ادخر ذلك للدرس المخصص بهذا

إنشاء الله طيب . كون الصوت في المكتبة لابد أن نستخدم هذا الكود

myduring.attachSound("during") وكون الصوت string فلابد أن

يكون بين علامتين تنصيص

ثم لتشغيل الصوت عن طريق الضغط على الزر كما ذكرت حفظك الله

ضع هذا الأمر

on(press) {

myduring.start("0",9999);

}

إذا كنت ترغب أن يعمل الصوت مرة واحد فقط امسح الذي بداخل القوسين من

الصفر إلى 9999 .

تعني الصفر 0 بداية الصوت أي من البداية بالنسبة لتشغيل الصوت

والأربع تسعات9999 تعني سيعاد تكرار حلقات الصوت كل ما ينتهي

بهذا الرقم أي تسعة آلاف وتسعمائة وتسعه وتسعون مرة


المهم المطلوب منك هو إدراج أصوات في المكتبة وتعريفها كما ذكرنا

لتتفق مع الوظيفة ولم ارفق الأصوات مع العمل كون المشروع بحجم 10MB

هذا ولله الحمد والمنة انتهينا من الوظيفة لن يكون هنالك امتحان رئفتنً بكم

من جراء هذه الدروس الطويلة


هذا والله تعالى اعلم

كلاشن كوف
26 Feb 2002, 05:01 PM
هلا اخوي الشهاب الحارق الحقيقةعندما ابدأ بتحميل المشروع يطلب مني الرقم السري (مسوي عليه حضر الله يهديك)ياليت لو تعطيني الرقم السري :D (جالس الف ودرور)هههه

كلاشن كوف
26 Feb 2002, 11:34 PM
لا أبشرك الأمور تمام قدرت احمل الملف(صار الجهاز حقي مضروب الضاهر انه بدا يفوت:D )
معليش سويت لك زحمة
السلام عليكم:D

الشهاب الحارق
28 Feb 2002, 02:26 AM
السلام عليكم

خذ راحتك يا كلاشن لا أعاتب أناسٌ أمثالك فنعم المتدلل

أنت


السلام عليكم