كيفية إعطاء إجراءات أزرار تم إنشاؤها ديناميكيا لكل واحد - الجزء 2

StackOverflow https://stackoverflow.com/questions/1468508

سؤال

مرحبا مرة أخرى زملاء المقاطع :)

سؤداني الاول يستعد هنا في Stackoverflow تعامل مع هذه المشكلة، كان لي مجموعة خلقت بعض الأزرار المختلفة. ومع ذلك، لم أكن أعرف كيفية تعيين الإجراءات لهم:كيفية إعطاء إجراءات أزرار تم إنشاؤها ديناميكيا لكل واحد - الجزء 1

بفضل خطافات جويل, ، كنت قادرا على عمل التعليمات البرمجية الخاصة بي. ولكن هذه المرة بدلا من استخدام رسومات مستورد كصف من مكتبتي، فأنا بدلا من إنشاء movieclip عن طريق رسم تدرج * (لم يكن بحاجة إلى استيراد JPG) *. الآن أنا أحصل على مرونة أخرى "لا تجميع الوقت ثابت" خطأ مرة أخرى. أعتقد أن لديها شيء يتعلق بكيفية تحديد مثيل الزر النقر أو rolledover.

إنشاء زر السابق (عمل) الشفرة:

ل (Var I: رقم = 0؛ أنا <myxmlarray.length؛ i ++) {navbutton = new navbutton؛ navputton.name = "زر" + I؛ navbutton.x = i * navsize؛ navputton.y = navbtny؛ navputton.buttonmode = صحيح؛ thumbsmov.addchild (Navputton)؛

buttons.push (navbutton)؛ أزرار [i] .addeventlistener (mousevent.mouse_up، handsbuttonclick)؛ أزرار [i] .addeventlistener (mouseevent.roll_over، handlebuttonover)؛ أزرار [i] .addeventlistener (mouseevent.roll_out، handlebuttonoff)؛ }

المستمع السابق (عمل) الشفرة:

function handleButtonOver(event:MouseEvent):void {

فار الزر: navputton = event.target كما navbutton؛ VAR ID: رقم = رقم (button.name.split (زر ")1) إذا (زر) TweenLite.to (ButtonUrolls [ID]، .4، {Alpha: 1، Ease: strong.ease})؛ CatateXT [ID] .DefaultTextFormat = A12Green؛ CatateXT [ID] .Text = myxmlarray [ID] .id؛ }

رمز إنشاء زر الحالي:

for (var i:Number = 0; i < num; i++) {
trace("loop number = "+i);

var blueGradient:MovieClip = new MovieClip();
 blueGradient.name = "button" +i;
 blueGradient.graphics.beginGradientFill(bGrad, bColors, bAlphas, bRatios ,bMatrix)
 blueGradient.graphics.drawRect(0, 0, 266, 40);
 blueGradient.x = i * navSIZE;
 blueGradient.y = navBtnY;
 blueGradient.buttonMode = true;
addChild(blueGradient);

buttons.push(blueGradient)

buttons[i].addEventListener(MouseEvent.MOUSE_UP, handleButtonClick);
buttons[i].addEventListener(MouseEvent.ROLL_OVER, handleButtonOver);
buttons[i].addEventListener(MouseEvent.ROLL_OUT, handleButtonOff);

}

رمز المستمع الحالي

function handleButtonOver(event:MouseEvent):void {
var button:blueGradient = event.target as blueGradient;
var id:Number = Number(blueGradient.name.split("button")[1]);
if(blueGradient)
 cataText[id].defaultTextFormat = navFontRoll;
 cataText[id].text = myArray[id].id;

}

سيتم تشغيل الفيلم الحالي دون خطأ إذا تم تعليق السطر التالي:

var button:blueGradient = event.target as blueGradient;

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

أي مساعدة أو مؤشرات هنا ستكون موضع تقدير كبير! شكرا مقدما على إلقاء نظرة على التعليمات البرمجية الخاصة بي.

هل كانت مفيدة؟

المحلول

أعتقد، منذ as الكلمة الرئيسية هي للصب، تريد هذا الخط بدلا من ذلك:

var button:MovieClip = event.target as MovieClip;

blueGradient يبدو أن اسم متغير، وليس اسم الفصل.

نصائح أخرى

مشكلتك هي أنك مربكة الطبقات البلاستيكية مع كائن الزر. في المعالج الأصلي، يقول التعليمات البرمجية الخاصة بك:

var button:NavButton = event.target as NavButton;
var id:Number = Number(button.name.split("button")[1]);
if(button)....

ولكن في التعليمات البرمجية الجديدة الخاصة بك،

var button:blueGradient = event.target as blueGradient;
var id:Number = Number(blueGradient.name.split("button")[1]);
if(blueGradient)

هل ترى الفرق؟ في كلتا الحالتين تشير إلى كائن الزر الخاص بك ك "فار الزر" - ولكن بعد ذلك في الإصدار الجديد، تكتب "Bluegradient.name.split ..." بدلا من "button.name.split ..." ونفس الشيء للحصول على بيان إذا ().

كلمة الكلمة الرئيسية تعرف اسم كائن. بناء الجملة هو VAR [ObjectName]: [ObjectType]، وعندما تعمل مع هذا الكائن، سترغب دائما في الرجوع إليها من خلال اسمه بدلا من نوعه. ما لم يكن لديك فئة ثابتة مع طريقة ثابتة، ولكن هذا أكثر تقدما قليلا.

لذلك، باختصار: استبدل "Bluegradiad" مع "زر" في هذين المكانين في معالجك الجديد، وينبغي أن يوضح مشاكلك. آمل أن ساعد ذلك!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top