الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تخفيض مستوى التمثيل في ActionScript

مغلق
بدأه MMSs في 30 يناير 2006 · 5 رد · 684 مشاهدة · في التصميم والفلاش والبرامج الرسومية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

لدي السطر التالي:

var element:Element = inMovie.attachMovie(idName, newName, inMovie.getNextHighestDepth());

النمط Element هو صف جديد مشتق من الصف MovieClip، أي هو وريثه. والمتغير inMovie من النمط MovieClip.

المشكلة الآن هي أن رسالة خطأ تقول لي أن هناك عدم تطابق في الأنماط (Type Mismatch in Assignment statement) في هذا السطر.

فما الحل لهذه المشكلة. ألا تدعم ActionScript الـ Polymorphism؟ وهل يوجد طريقة لتخفيض مستوى التمثيل هنا؟

مع العلم بأن مجرد حذف الكلمة inMovie من السطر السابق لتصبح كما يلي، يزيل هذا الخطأ:

var element:Element = attachMovie(idName, newName, inMovie.getNextHighestDepth());

مما يعني أن التعليمة attachMovie أحد تعليمات ActionScript غير التعليمة نفسها ولكن التابعة للصف MovieClip.

وبالطبع هذا ليس بالحل المقبول.

#2

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

اما ان تتابع في تكوين الكائن var element:Element

او ان تنشئه بنقسك يدويا على انه MovieClip

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

و الاهم هو انك يجب ان تعطي ارقام لأسماء العناصر الموجوده داخل مصفوفه array لكي يتم بناء ال Element

من خلالها.

فهذه العمليه تبنى من خلال مصفوفه مهما تكن و الاكثريه يستخدمونها لقرائة Xml Tree Nodes

مارأيك ان تضع مثال بسيط يمكن من خلاله ان نصحح الخطأ؟؟

اذا اراد الله بعبد خيراً فقهه في دينه

((إياكم والغلو في الدين فإنما هلك من كان قبلكم بالغلو في الدين )).

( إن هذا الدين يسر ولن يشاد هذا الدين إلا غلبه فأوغلوا فيه برفق )

( هلك المتنطعون ، هلك المتنطعون ، هلك المتنطعون )

<span style='font-size:14pt;line-height:100%'>طريقة سريعة لحفظ كتاب الله العزيز</span>

<span style='font-size:14pt;line-height:100%'>تعرف على عباقرة الكذب</span>

#3
اقتباس
المشكله هي انك انشئت بداية عنصر جديد من حيث الاسم و ليس من حيث الكائن

لم أفهم قصدك تماماً هنا، فأنا أنشئ أولاً MovieClip جديد عن طريق التعليمة attachMovie ضمن inMovie، ثم أأشر عليه بالمتغيير element الذي هو من النمط Element، وبما أن الصف Element مشتق من MovieClip فهو ابن له، لذلك من المفروض بحسب قواعد البرمجة غرضية التوجه أن يقبل الإشارة على عنصر من نمط الصف الأب.

ولا أدري ما المشكلة في ذلك بما أن ActionScript غرضية التوجه، وهذا من بين قواعد تعدد الأشكال Polymorphism.

لم أفهم أيضاً عن أي مصفوفة تتحدث، على كل الأحوال في هذا الصف Element يوجد بالفعل مصفوفة تحوي كل العناصر. المثال المرفق يوضح ذلك.

ولكن بالنسبة للخطأ الذي يحصل هنا هو Syntax Error وليس خطأ تنفيذ، يمكنك بعد كتابة التعليمة الأولى السابقة وتنفيذ عملية Check Syntax أن تلاحظ رسالة الخطأ التي سيعيطها Flash.

والرسالة بالشكل الكامل هي التالية:

**Error** ...\Element.as: Line 16: Type mismatch in assignment statement: found MovieClip where Element is required.

var element:Element = inMovie.attachMovie(idName, newName, inMovie.getNextHighestDepth());

Total ActionScript Errors: 1 Reported Errors: 1

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

Element.zip

#4

ان ما كتبته في مشاركتي السابقه مكتوب في التعليق على الكود في المثال الذي ارفقته انت :

اقتباس
المشكله هي انك انشئت بداية عنصر جديد من حيث الاسم و ليس من حيث الكائن

اما ان تتابع في تكوين الكائن var element:Element

او ان تنشئه بنقسك يدويا على انه MovieClip

//the next refers to the rectangle (border) bounds where the new element MovieClip will be created in.

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

//the reason of using inMovie is the need to put the new element within the desired MoiveClip

على كل حال اليك سبب الخطأ و ارجو ان يكون كلامي مفهوم:

عند انشاء اي Class فهو يعتبر عنصر Object و عند استدعاء هذا العنصر فيجب استدعائه على انه عنصر جديد باسم جديد كي يبقى حر التصرف في الاستدعائات

و لهذا يجب استخدام new لكي تتم عملية التمثيل لل Class

ولا تنسى ان تضع اسم للعنصر الذي تقوم بتطبيق الكود عليه و لا تكتفي ب this اقصد في ملف fla

تم تعديل هذه المشاركة بواسطة عامـر في 31 يناير 2006 في 15:35

اذا اراد الله بعبد خيراً فقهه في دينه

((إياكم والغلو في الدين فإنما هلك من كان قبلكم بالغلو في الدين )).

( إن هذا الدين يسر ولن يشاد هذا الدين إلا غلبه فأوغلوا فيه برفق )

( هلك المتنطعون ، هلك المتنطعون ، هلك المتنطعون )

<span style='font-size:14pt;line-height:100%'>طريقة سريعة لحفظ كتاب الله العزيز</span>

<span style='font-size:14pt;line-height:100%'>تعرف على عباقرة الكذب</span>

#5

لم يتم ارفاق المستند بشكل صحيح فيبدو ان هناك مشكله في المنتدى

//remember; this is just a snippet of the long code
class Element extends MovieClip {
	private static var _elementNum = 1;
	private static var _elements:Array = new Array();
	//the next refers to the rectangle (border) bounds where the new element MovieClip will be created in.
	private static var _borderBounds:Object;

	//setters\\
	public static function set borderBounds(bounds:Object):Void {
  _borderBounds = bounds;
	}

	//functions\\
	public static function createNewElement(idName:String, newName:String, inMovie:MovieClip) {
  //the reason of using inMovie is the need to put the new element within the desired MoiveClip
  //don't forget to call you'r object as a new object with new name. (amer)
  var element:Element = new inMovie.attachMovie(idName, newName, inMovie.getNextHighestDepth());
  _elements[_elementNum++] = element;
  element._x = Math.random() * (_borderBounds.xMax - _borderBounds.xMin) + _borderBounds.xMin - element._width;
  element._y = Math.random() * (_borderBounds.yMax - _borderBounds.yMin) + _borderBounds.yMin - element._height;
	}
}

اذا اراد الله بعبد خيراً فقهه في دينه

((إياكم والغلو في الدين فإنما هلك من كان قبلكم بالغلو في الدين )).

( إن هذا الدين يسر ولن يشاد هذا الدين إلا غلبه فأوغلوا فيه برفق )

( هلك المتنطعون ، هلك المتنطعون ، هلك المتنطعون )

<span style='font-size:14pt;line-height:100%'>طريقة سريعة لحفظ كتاب الله العزيز</span>

<span style='font-size:14pt;line-height:100%'>تعرف على عباقرة الكذب</span>

#6
عامـر كتب:
ان ما كتبته في مشاركتي السابقه مكتوب في التعليق على الكود في المثال الذي ارفقته انت :

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

اما ان تتابع في تكوين الكائن var element:Element

او ان تنشئه بنقسك يدويا على انه MovieClip

//the next refers to the rectangle (border) bounds where the new element MovieClip will be created in

أود التوضيح أولاً بأني أخطأت في التعبير في هذا التعليق عندما كتبت will be created in كان من المفروض أن أكتب will be created within يعني أن العنصر element الجديد سوف يعطى إحداثيات ليكون موقع ضمن هذا الإطار.

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

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

اقتباس
ولا تنسى ان تضع اسم للعنصر الذي تقوم بتطبيق الكود عليه و لا تكتفي ب this اقصد في ملف fla

لا أعتقد أن هناك مشكلة في طريقة العمل بالنسبة لهذه النقطة، ولكن لو كنت ترى أن أعطي اسم للـ MovieClip واستخدمه بدلاً من this فكيف سيتم ذلك؟؟ لاحظ أني باستخدام this أرسل الـ MovieClip الذي أكتب فيه هذه الشيفرة نفسها فكيف سأعطيه اسماً.

Element.zip

هذا الموضوع مغلق.

مواضيع مشابهة