مشاهدة النسخة كاملة : Action Script Fundamentalpart 7


الشهاب الحارق
13 Feb 2002, 05:08 AM
السلام عليكم ورحمة الله وبركاته

part 7 Action Script Fundamental

الدرس السابع الوظيفة Function القسم الأول

حمل الأمثلة كلها (http://mypage.ayna.com/highspy/ActionScript/function/functions.zip)



كثيرا ما نسمع عن الوظائف في لغات البرمجة و كانت بمثابة الحلم الذي يراود كل مبرمج مبتدأ

آنذاك ولكن قليلٌ فقط من المبرمجين الذين تمرسُ في هذا المنعطف البرمجي وبقي الأخر ون

يعكفون على الطريقة الكلاسيكية القديمة حيث الكتابة المتكررة والمملة ومن هذا المنطلق

أردنا توضيح الغموض فيها والوقوف على قوانينها .



قبل أن ابدأ في الشرح أريد فقط أن أبين متى نحتاج إلى الوظيفة وما مدى الاستفادة منها ؟

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

جواب السؤال الثاني الفائدة عظيمة وغير محصورة حيث نستطيع أن نتبادل الوظائف بيننا

فيما بعد يوم إنشاء الله تكون قد بلغتم مبلغكم في ألا كشن أسكر بت بحول الله سبحانه وتعالى .


التركيبة النصية للوظيفة

function
Syntax
function functionname ([argument0, argument1,...argumentN]){
statement(s)
}
function ([argument0, argument1,...argumentN]){
statement(s)
}


حتى لا تكترث من هذه التركيبة الشبه معقدة فقط تذكر أننا وضعنا تركيبتها الآن كافتراض

على أي شارح أن يبدأ بهذا الأسلوب ثم سنفصل إنشاء الله حسبما نراهُ اسهل وأيسر .

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

أما الطريقة الثانية فهي استخدام الوظيفة على أنها نص برمجي وليست وظيفة مستقلة بذاتها .

وحتى لا تتوه في هذه الدوامة يفضل أن تنسى هذا قليلً حتى نعود إليه فيما بعد .

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


1- تعريف الوظيفة Function declaration
2- مناداة الوظيفة Function invocation
3- عناصر الوظيفة Function arguments and parameters
4- إنهاء الوظيفة Function termination
5- محيط الوظيفة Function scope


إنشاء الوظيفة .


أولاً لابد من كتابة النص البرمجي للوظيفة وهو function

ثم بعد ذلك اسم الوظيفة function name

ثم القوسين بعد الاسم ()

ثم نفتح قوس منحني {

وننهي الوظيفة بالقوس المنحني المقابل }

وتكون بهذا الطريقة
Function nassir() {

}



نريد الآن أن نعرض رسالة ترحيب عن طريق الوظيفة

أولاً لابد أن نقوم بإنشاء الوظيفة


function greeting() {

trace(“hello this message comes from greeting function “)

}



الآن بعد ما انتهينا من إنشاء الوظيفة سنقوم بمناداة الوظيفة عن طريق الأمر trace()



trace(greeting());


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

طريق الأمر trace()

اسم الدرس examfunction1


ثم بعد ذلك تابع بقية الشرح .





تمرير القيم إلى الوظائف

وهي مقسمة إلى عدة أقسام وسنسوقها لك من اليسير إلى الاحتراف .

التمرين الأول في تمرير القيم إلى الوظيفة


width = 550 height = 400


function growball () {

ball._x +=10;
ball._y +=10;

}

هذا الوظيفة ستكون في الفريم الأول للمشهد الرئيسي

ثم نصنع فلم نسميه في الاسم التعريفي instance name و يكون أسمه ball


ثم نصنع زر button نضع فيه هذا النص البرمجي الذي ينادي هذه الوظيفة


هذا النص البرمجي الذي يحتويه الزر.


on (press) {

growball();

}

الشرح : -

عرفنا كيف ننشئ الوظيفة عن طريق النص البرمجي ثم نكتب اسم الوظيفة ثم القوسين ثم القوس المنحني ثم إغلاق الوظيفة

الزيادة في هذا المثال هو وضع قيمة متزايدة لعرض الكرة ولطولها كلما تم الضغط على الزر

نستنتج من ذلك أن الوظيفة لا تعمل إلا إذا ما تم مناداتها عن طريق هذا الزر .

كذلك نستنتج أن الوظيفة لا تعمل إلا على الفلم الذي أسمه ball



حاول اكتشاف الأخطاء في هذا التركيبة النصية

Functions random () {

Ball._x +=110;
Ball.y+=111;

{

الزر الذي ينادي هذه الوظيفة فيه هذا النص البرمجي

On (press) {

Rand();

}

حاول أن تبني نفس التركيبة النصية ولكن بالشكل الصحيح .



إنشاء وظيفة مع عناصرها .

في هذا القسم سوف نقوم بعمل متقدم وهو وضع عناصر الوظيفة لتأدية مهام معينة

نتذكر الآن التركيبة النصية للوظيفة التي ذكرناها في بادئ الدرس وهي



Syntax
function functionname ([argument0, argument1,...argumentN]){
statement(s)

ترى العناصر argument مرتبة بالأرقام من صفر إلى مالا نهاية وهي تلك القيم التي تنفذ المهام الملقى على

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

أضف في القوسين هذه العناصر parameters وهم كالآتي theclip,xscalevalue,yscalevalue

ثم استبدل النص البرمجي الذي يشير الى الكرة ball بالعنصر theclip

وبدل القيم بعد عملية Assignment Operators وهي += بالعنصر xscalevalue

للخاصية _xscale والعنصر yscalevalue للخاصية _yscale



الشكل النهائي لهذه النصوص البرمجية كالتالي

function growball (theclip,xscalevalue,yscalevalue) {

theclip._xscale +=xscalevalue;
theclip._yscale +=yscalevalue;

}


ثم ضع هذا النص البرمجي في الزر


on (press) {

growball(ball,10,10);

}



width = 550 height = 400


الشرح الجديد في هذا الدرس لاشيء إطلاقاً و إنما فقط تغير تركيبة النصوص البرمجية إذا صح التعبير

لكن الهدف منشود فيها وهو تعريف تمرير القيم إلى الوظائف وإخبارها عن القيم التي ستمرر إلى

الكرة بالخاصية الطولية والعرضية للكرة xscale yscale

ترى في بداية الوظيفة قمنا بوضع العناصر و هي أي اسم نكتبها إلا كما ذكرنا في دروسنا السابقة

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

ثم بعد تعريف العناصر لابد أن تكون في محيط الوظيفة تؤدي عملاً ما وإلا ستكون عديمة الفائدة

لو افترضنا أننا زدنا في العناصر عنصرً اسمه zscale شاهد هذا المثال

function growball (theclip,xscalevalue,yscalevalue,zscale) {

theclip._xscale +=xscalevalue;
theclip._yscale +=yscalevalue;

}

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

الثالث لذا نستنتج من ذلك أن العنصر الثالث عديم الفائدة كونه ليس له دور يؤديه في محيط هذه الوظيفة

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

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

فمثلاً theclip يشير إلى انه سيأخذ الاسم التعريفي للفلم instance name of movie clip

و xscalevalue يعبر عن قيمة الخاصية العرضية التي سيعتمد عليها theclip و هلم جرى .


المهم أننا بعد أن وضعنا عناصر للوظيفة نريدها أن تؤدي عملاً ما لتكون ذات فائدة

فقمنا بوضعها في محيط هذه الوظيفة واسندنا لها مهام ذكرناها للتو


جاء الآن الدور السحري لهذه الوظيفة وهي تأدية المهام عند مناداتها invoking or calling function

وهي في مثالنا هذا طبعً عبر الزر الذي سيخاطب هذه الوظيفة ويعطيها قيم لعناصرها فتقوم هي معتمدةً على

هذه القيم وتمررها إلى تلك العناصر

كيف يكون ذلك ؟


on (press) {

growball(ball,10,10);

}


تلاحظ أن إذا ما أردنا مناداة الوظيفة ذكرنا اسمها في بادئ الأمر growball()

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


Theclip ==ball

Xscalevalue == 10

Yscalevalue == 10


حيث اسم التعريفي للفلم سيكون القيمة للعنصر theclip

وتكون القيمة 10 للعنصر xscalevalue

والثالث للثالث

الآن تعالى نتخيل كيف ستقوم الوظيفة بالعمل بشكل تخيلي صرف

سيكون شكلها كالتالي عندما تضغط على الزر.

Function growball(ball,10,10) {

Ball._xscale += 10;
Ball._yscale += 10;

}

وهذا فقط يحدث حينما تقوم يا عزيزي بالضغط على الزر وينتهي عندما يتحرر الزر من الضغط عليه

بل تموت كل القيم و لا عزاء لها وتعود التركيبة النصية الأولى إلى نشأتها الأولى فقط ريثما يتحرر الزر

من القيم التي أرسلها إلى هذه الوظيفة وستكون كسابقِ عهدها في طورها الأول .


function growball (theclip,xscalevalue,yscalevalue) {

theclip._xscale +=xscalevalue;
theclip._yscale +=yscalevalue;

}

تطوير عمل الوظيفة عن طريق نصوص الإدخال input boxes

width = 550 height = 400

تذكر فقط أن كلما كثفنا التمارين كلما كانت الاستفادة اكثر .


function controllmc(theclip,xscale,yscale,rotateit,width,he ight,alpha,x,y) {


theclip._xscale = xs;
theclip._yscale = ys;
theclip._rotation = rotateit;
theclip._width = width;
theclip._height = height;
theclip._alpha = alpha;
theclip._x = x;
theclip._y = y;

}

ماذا سنزيدُ على عملنا السابق سوى أننا نضع نصوص الإدخال ونجعل كل واحد خاص لخاصية الكرة

يوافقها من حيث الاسم كمدلول على العمل المكلف به

وكما تلاحظ غيرنا اسم المتغير تماشياً مع مهام العناصر بداخلة حيث كان في السابق عنصرين فقط لتحريك الكرة لكن صار

الآن له اكثر من ستة عناصر ومهام لذلك أعطيناه اسم المتحكم controllmc



وهذا ما سيحويه الزر .

on(press) {

controllmc(ball,xs,ys,r,w,h,a,x,y);

}

وصلنا إلى نهاية القسم الاول وسيكون لنا انشاء الله تكمله لاحقاً

هذا والله اعلى واعلم السلام عليكم

المسافر
13 Feb 2002, 06:46 AM
مشكور اخوي
بالتوفيق
والسلام

tamimi
13 Feb 2002, 09:58 AM
السلام عليكم
شكرررا اخوي السهاب انا طبقت كلللش بس ما عرفت الاغلاط حاولت اصلح عرفت غلط واحد بس والباقي لأ :)

الشهاب الحارق
18 Feb 2002, 01:58 PM
السلام عليكم

لا شكر على واجب يا اخوي مسافر و تميمي