Actionscript 3.0:创建一个按钮实例名称数组

时间:2012-03-24 18:04:10

标签: arrays actionscript-3 flash button

在Flash中,我创建了一个包含400个按钮的网格,实例名称为c0c399

在Actionscript中,我想创建一个这样的数组:

var myArray:Array = [c0,c1,c2,c3,c4,c5,c6];

一直到c399

我写了一个for循环来做这个技巧,但它似乎没有起作用:

import flash.events.MouseEvent;
//create the array
var myArray:Array = [];


for (var i:int=0;i<399;i++){
    var cletter:String = 'c';
    var p:String = i.toString();
    var newvalue:String = cletter + p;
    var shizzle:Object = new SimpleButton();
    myArray[i] = shizzle;
}


for each(var btn in myArray){
    btn.addEventListener(MouseEvent.CLICK, onBtnClick);     
}
function onBtnClick(event:MouseEvent):void{
 cellinfo.gotoAndStop(event.target.name);
}

当我发布它时,没有错误显示,单击按钮时没有任何反应。但是,如果我使用

var myArray:Array = [c0,c1,c2,c3,c4,c5,c6];
它确实有效! (至少前7个按钮。)

另外,当我把:

for (var i:int=1;i<6;i++){
    var cletter:String = 'c';
    var p:String = i.toString();
    var newvalue:Object = cletter + p;
    myArray[i] = newvalue;
}

它说:

  

TypeError:错误#1006:value不是函数。在   PVproject1_fla :: MainTimeline /帧1()

我刚刚开始使用AS3 + Flash,花了好几个小时寻找解决方案。请帮忙!

2 个答案:

答案 0 :(得分:1)

您的代码以多种方式被破坏。

for (var i:int=0;i<399;i++){
    var cletter:String = 'c';
    var p:String = i.toString();
    var newvalue:String = cletter + p; // => this is never used
    var shizzle:Object = new SimpleButton(); // => this creates a new (!) button
    myArray[i] = shizzle;
}

400个新创建的按钮中的每一个都不会添加到舞台中,因此您无法看到它。而且由于它没有皮肤或其他视觉特性,如果是的话,你将无法看到它。

第二个for循环只将名称放入数组中 - 当您尝试将数组值作为按钮访问时,这会导致“值不是函数”错误,因为该值实际上是一个字符串:

for (var i:int=1;i<6;i++){
    var cletter:String = 'c';
    var p:String = i.toString();
    var newvalue:Object = cletter + p; // <= this is a String!
    myArray[i] = newvalue;
}

现在除了根本怀疑你是否真的想要手动创建400个按钮实例(我想在ActionScript中使用它并使用这个实际创建来填充数组),你可以做到以下几点 - 但是记住:如果按钮实例已经在舞台上,并且循环位于帧脚本中!

for (var i:int=0;i<399;i++){
    myArray[i] = this["c"+i]; // no need for all the p and .toString() stuff, btw
}

答案 1 :(得分:0)

另一种解决方案是只是注意将它们添加到舞台并在那时捕获它们,类似于您可以在此处下载的示例之一http://flexdiary.blogspot.com/2010/04/sample-code-for-oop-timeline-insideria.html