在Flash中,我创建了一个包含400个按钮的网格,实例名称为c0
到c399
。
在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,花了好几个小时寻找解决方案。请帮忙!
答案 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