النوع (MovieClip)

 

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

 

duplicateMovieClip  :-

 

anyMovieClip.duplicateMovieClip(newname, depth);

 

          تقوم هذا الأمر بإنشاء نسخة طبق الأصل من الكائن الحالي (anyMovieClip) و لكن ليست نسخة بكل ماتعنيه الكلمة بل أنه يظل تابع للكائن الأصلي أي لو كان هناك أي متغير و غير قيمته في الكائن الأصلي فإن النسخة الجديدة سوف يتغير فيها و لو أزلنى الكائن الإصلي لأزيلة النسخة . و إن كنت تريد إزالة النسخة فقط فهناك وظيفة (removeMovieClip) تقوم بهذا العمل .

 

(newname) :- يقوم هذا الوسيط بتحديد اسم الكائن الجديد .

(depth) :- يقوم هذا الوسيط بتحديد ترتيب ظهور الكائن الجديد . و هذا الترتيب يشبه ترتيب الطبقات (layers) عندما تأتي طبقة فوق طبيقة أي منهما يظهر على الآخر ؟ أظن هذا يكفي لإيصال المعنى .

 

on(release) {
       amount = 10;
       while(amount>0) {
              anyMovieClip.duplicateMovieClip ("mc" + i, i);
              setProperty("mc" + i, _x, random(275));
              setProperty("mc" + i, _y, random(275));
              setProperty("mc" + i, _alpha, random(275));
              setProperty("mc" + i, _xscale, random(50));
              setProperty("mc" + i, _yscale, random(50));
              i = i + 1;
              amount = amount-1;
       }
}

 

getBytesLoaded :-

 

anyMovieClip.getBytesLoaded();

 

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

 

getBytesTotal :-

 

anyMovieClip.getBytesTotal();

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

 

getURL :-

 

anyMovieClip.getURL(URL ,window, variables);

 

تقوم هذه الوظيفة بجلب أو تحميل مستند من الموقع الذي تم تمريره إليها أو يمكن تمرير متغيرات أو جلب متغيرات من برامج في السيرفر . كل هذا عن طريق هذه الوظيفة و تأخذ الوسطاء :-

 

(URL) :- هنا تحدد الموقع الذي سوف تحمل منه أو تمرر إليه

(window) :- هنا سوف تحدد في أي نافذة سوف يفتح المستند المحمل و تأخذ القيم (: _self , _parent , _blank , _top) لمزيد من المعلومات حول هذه القيم يرجى زيارة الدرس الخاص بالخصائص .

(variables) :- و هنا تحدد إذا كنت تتعامل مع تطبيقات الويب إن كنت تريد إرسال أو استقبال متغيرات .

 

gotoAndPlay :-

 

anyMovieClip.gotoAndPlay(frame);

 

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

 

gotoAndStop :-

 

anyMovieClip.gotoAndStop(frame);

 

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

 

hitTest :-

 

anyMovieClip.hitTest(target); 
anyMovieClip.hitTest(x, y, shapeFlag);

 

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

 

(target) :- و هنا من المفترض أن تكون الدائرة ، أ, بمعنى أصح مسار الكائن الذي سوف يختبر إذا ما كان فوق المربع (anyMovieClip) .

(x) :-  و هو الخيار الثاني حيث يتم اختبار نفطة بدلا من كائن و هنى سوف يتم تحديد الإحداثي (x) للنقطة .

(y) :- و هنا يتم تحدي الإحداثي (y) .

(shapeFlag) :- هذا البارمتر صعب في فهمه و يحتاج إلى تركيز فرجاء أن تعيد قراءة هذه الفقرة في حالة عدم فهمك لها ، و قبل أن أبدأ سوف أدرج الصورة التالية .

 

 

ألا تلاحظ المحيط الذي لونه أزرق سماوي (أزرق فاتح) ؟ ألا ترى  الشكل الهندسي الذي بداخل المربع ؟ فهذا البارمتر يأخذ true في حالة أنك تريد تقرير هل النقطة فوق الشكل الهندسي أو بمعنى أصح الحيز الذي يشغله الكائن من (Stage) ، أما في حالة إعطائه القيمة false فهذا يعني أنك تريد تقرير هل النقطة فوق المبع الخارجي .

 

          كما ترى هناك طريقتين لتمرير الوسطاء إلى الوظيفة (hitTest) و لكن كيف نحدد أيهما نستخدم . أما الجواب فهو أسهل مما تتصور ففي حالة أنك تريد تقرير ما إذا كان هناك كائن فوق كائن آخر فسوف تستخدم الطريقة الأولى :-

 

anyMovieClip.hitTest(“_root.MyMovieClip”); 

 

          أما  إذا كانا نريد تقرير هل النقطة فوق المربع (anyMovieClip) فنحن نستخدم الطريقة الثانية و نمرر له إحداثي النقنقة في الوسيطين (x ,y) أما الوسيط الثالث فيحدد طريقة تقرير شكل الكائن كما ذكرنا قبل قليل . و في حالة أنك تريد أن تكون النقطة فأرة أو بمعنى أصح تريد تقرير هل الفأرة فوق الكائن أم لا فإنك تضع إحداثي السيني و الصادي الخاص بالفأرة عن كما هو موضح في المثال التالي  طبعا الوسيط الثالث أنت الذي تقرره :-

 

anyMovieClip.hitTest(_root._mousex, _root.mousey, true);

 

loadMovie :-

 

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

 

anyMovieClip.loadMovie(url ,variables);

 

(url) :- و هنا تحدد الفلم الدي ترد تحميله .

(variables) :- أما هذا الوسيط فهو خاص ببرامج CGI حيث يتم أرسال أو ستقبال متغيرات مع تحميل الفلم . و أما أن تكون  "GET" أو "POST"  في حالة عد التعامل مع برامج سي جي أي و هذا هو المتوقع تجاهل هذ الوسيط حيث تصبح الوظيفة مقتصرة على الوسيط الأول فقط ، و بدون وضع فاصلة بعد الوسيط الأول .

 

loadVariables :-

 

          هذه الوظيفة تقوم بقراءة ملف خارجي  و من ثم إسنادها إلى متخير داخل الفلم . أما الملفات الخارجية يمكن أن تكون ملف نصية صفحات ويب أ, حتى أحد تطبيقات الويب .  و من فوائد هذا الأمر أنه يتيح لك إمكانية إدارج صفحات الويب داخل فلم فلاش . و فيما يلي بنيتها :-

 

anyMovieClip.loadVariables(url, variables);

 

(url) :- هنا تحدد المكان الذي يقع فيه الملف الذي تريد تحميله .

(variables) :- هنا تحدد هل تريد إرسال متغير إلى برنامج سي جي أي أو استقبال متغير منه . في حالة عدم التعامل مع برامج السي جي أي يجب تجاهل هذا الوسيط نهائيا  . حيث يصبح هذا الأمر مقتصرا على وسيط واحد .

 

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

 

 

          و الآن تريد أن أ، يقوم فلاش بتحميل قيمة هذا المتغير من ملف خارجي ، لنفرض أن هذا الملف اسمه file1.txt ، لاحظ أنه يجد أن تحدد قيمة المتغير الذي سوق تسند إليه القيمة الملف من داخل الملف . مثلا نريد أن نسند للمتغير السابق القيمة 10 . في هذه الحالة نقوم بفتح الملف و نكتب به السيطر التالي :-

 

textBox = 10

 

قم بحفظ الملف النصي . و بعد ذالك قم بجعل أحد الفريمات التي في الخط الزمني الرئيسي (_root) أو أحد الأزرة التي ليست داخل الكائن (myMovieClip) بتنفيذ السطر التالي .

 

myMovieClip.loadVariables("file1.txt");

 

nextFrame :-

 

          كما تعرف و كما قلت سابقا أن كل كائن (MovieClip) له خط زمني خاص و مستقل به عن الخط الزمني الخاص بالفلم . فهذا الأمر يقوم بإنتقال إلى الفريم التالي في الخط الزمني الخاص بكائن معين و تبدو بنية هذه الوظيفة كما يلي : -

 

anyMovieClip.nextFrame();

 

play :-

 

          إحدى الوظائف التي تتحكم في الخط الزمني الخاص بالكائن مثل الوظيفة السابقة ، لكن الفرق يكمن في أنها تأمر الخط الزمني بالعمل و تبدو بنيتها كما يلي :-

 

anyMovieClip.play();

 

prevFrame :-

 

          وظيفة أخرى تتحكم في الخط الزمني الخاص بالكائن تأمره بالانتقال إلى الفريم السابق و تبدو بنيتها كما يالي :-

 

anyMovieClip.prevFrame();

 

removeMovieClip :-

 

          من المستحسن في فلاش أن تقوم كلما أنتهيت من كائن ما حيث لم  يصبح له أهمية أن تقوم بإزالته ليوفر على المستخدم الذكرة المستخدمة فهذه الوظيفة تتولى هذه المهمة حيث تقوم بإزالة الكائن نهائيا و كأن شيئا لم يكن و لا تأخذ أي وسطاء و تبدو بنيتها كما يلي :-

 

anyMovieClip.removeMovieClip();

 

startDrag :-

 

          تعتبر أحد أجمل الأوامر و أكثرها استخداما في فلاش و السبب في ذلك هو أنها تؤدي مهمة جميلة  جدا ألا و هي السحب بالفأرة ، أي  أن الكائن يتبع الفأرة أو تحمل الفأرة الكائن . و يبقى الكائن على هذا الحال حتى يتم توجيه هذا الأمر إلى كائن آخر أو يتم تنفيذ أمر الإسقاط الذي سوف يأتي فيما بعد .

 

anyMovieClip.startDrag(lock);

 

(lock) :- من هنا تتحكم في مكان الفأرة بانسبة للكائن في الوقت الذي يتم سحب الكائن فإذا كانت القيمة true فسوف يكون تلقائيا مكان الفأرة في وسط الكائن أما إذا كانت القيمة false فسوف يكون مكان الفأرة في الموضع الذي تم الضغط فيه و هذا الوسيط اختياري يمكن حذفه. طبعا هناك عدد من الوسطاء الاختياريين لكن المجال لا يسمح .

 

stop :-

 

          آخر الوظائف التي تتحكم في الخط الزمني الخاص بخط الزمني الخاص بالكائن حيث تأمره بإيقاف عمل الخط الزمني .

 

anyMovieClip.stop();

 

stopDrag :-

 

          هذه الوظيفة تقوم بإسقاط الكائن من سحب الفأرة ، هذا يعني عندما تسحب الفأرة كائن ما و تريد أن تترك الفأرة هذا الكائن فيجب عليك استخدام هذه الوظيفة ، هذه الوظيفة لا تأخذ أي وسيط و لها البنية التالية .

 

anyMovieClip.stopDrag();

 

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

 

swapDepths :-

 

          هذه الوظيفة تختص في ترتيب ظهور الكائنات أو بمعنى أصح عندما تتداخل الكائنات فأي منها يظهر في المقدمة . فكل كائن له ترتيب في الظهور . فهذه الوظيفة تقوم بالتبديل هذا الترتيب مع كائن آخر حيث تأخذ هذه الوظيفة وسيط واحد و هذا الوسيط يمكن أن يكون الكائن الذي تريد تبديل تريتيب الظهور و تبدو بنيتها كما يلي :-

 

anyMovieClip.swapDepths(target);

 

(target) :- و هنا تحدد الكائن التي تريد تبديل بينه و بين الكائن (anyMovieClip) .

 

unloadMovie :-

 

          و هذه الوظيفة تقوم بازالة الملفل الذي تم تحميله بواسطة الوظيفة (loadMovie) و هذه الوظيفة لا تأخذ أي وسطاء . و تبدو بنيتها على الشكل التالي :-

 

anyMovieClip.unloadMovie();

 

this :-

 

          هذه الكلمة لها استخدام جميل جدا في في فلاش . و هي عبارة عن اسم الكائن الحالي ، فعلى سبيل المثال عندما تريد توجيه أمر أ, الجوع إلى أحد المتغيرات أو الوظائف الأعضاء في الكائن (anyMovieClip) . و أنت الآن داخل هذا الكائن و أعني بدخال الكائن أي أنت التوجه الأوامر من الخط الزمني الخاص به أو حتى عندما تقوم بتحديد الكائن ، و كتبت الأمر التالي :-

 

anyMovieClip.stop();

 

          سوف لن يستجيب الكائن لهذا الأمر حيث يجب هنا استخدام this كما يلي :-

 

this.stop();

 

 عادة ما تستخدم this لتوضيح الكود للقارئ أو للتمييز بين متغيرات أو وظائف أعضاء لدى الكائن عن متغيرات أو وظائف غير أعضاء .

الوظائف و المتغيرات الأعضاء :-

 

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

 

anyMovieClip.var1 = 0;
this.var1 = 0 ;

 

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

 

          أما الوظائف فيجب أن تعلن عنها داخل الكائن باستخدام الكلمة المفتاحية function لمزيد من المعلومات الرجاء زيارة الدرس الخاص بالوظائف لمعرفة كيفية الإعلان عنها و التعامل معها .