如何为每个操作提供动态创建的按钮操作 - 第2部分
-
13-09-2019 - |
题
嗨,再次闪光灯:)
我在Stackoverflow在这里纠正的第一个问题处理了这个问题,我有一个阵列创建了一些不同的按钮。但是我不知道如何为他们分配行动:如何为每个操作提供动态创建的按钮操作 - 第1部分
谢谢 乔尔·胡克斯(Joel Hooks), ,我能够使我的代码正常工作。但是,这次不是从我的库中使用导入的图形作为类,而是通过绘制梯度*(不需要导入JPG)*来创建MovieClip*。现在我得到了另一个可怕的 “不编译时间常数” 再次错误。我相信这与我试图确定单击或滚动的按钮实例有关。
上一个按钮创建 (在职的) 代码:
for(var i:number = 0; i <myxmlarray.length; i ++){navbutton = new navbutton; navbutton.name =“ button” + i; navbutton.x = i * navsize; navbutton.y = navbtny; navbutton.buttonmode = true; Thumbsmov.Addchild(Navbutton);
buttons.push(navbutton); button [i] .addeventListener(mouseevent.mouse_up,handlebuttonClick); button [i] .addeventListener(mouseevent.roll_over,handlebuttonover); button [i] .addeventListener(mouseevent.roll_out,handlebuttonoff); }
以前的听众 (在职的) 代码:
function handleButtonOver(event:MouseEvent):void {
var按钮:navbutton = event.target作为navbutton; var ID:number = number(button.name.split(“ button”)1); if(button)tweenlite.to(buttonRolls [id],.4,{alpha:1,sele:strong.easeout}); 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
似乎是一个可变名称,而不是类名称。
其他提示
您的问题是,您将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)
你看得到差别吗?在这两种情况下,您都将按钮对象称为“ var button” - 但是在新版本中,您可以编写“ bluegradient.name.split ...”而不是“ button.name.name.split ...”和相同对于您的if()语句。
var关键字定义对象的名称。语法是var [objectName]:[ObjectType],当您使用该对象时,您将始终需要以其名称而不是通过其类型来引用它。除非您拥有带有静态方法的静态课程,否则这要高度先进。
因此,简而言之:在您的新处理程序中的这两个地方替换“蓝色果实”,将“ bluegradient”替换,它应该清除您的问题。我希望有帮助!