嗨,再次闪光灯:)

我在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”替换,它应该清除您的问题。我希望有帮助!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top