2012-03-24 15 views
0

В Flash я создал сетку из 400 кнопок с именами экземпляров c0-c399. В Actionscript, я хотел бы создать массив как это:ActionScript 3.0: создание массива имен экземпляров кнопок

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

вплоть до C399.

я написал для цикла, чтобы сделать трюк, но не кажется, что это будет работать:

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: Error # 1006: Значение не является функцией. на PVproject1_fla :: MainTimeline/frame1()

Я только начал работать с AS3 + Flash и потратил часы на поиск решения. Пожалуйста помоги!

Спасибо заранее, Роб

ответ

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 (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 
} 
+0

УДИВИТЕЛЬНЫЙ! вот и все .. волшебство «это», я думаю. Спасибо мирскому пирату. – Rob360

+0

Добро пожаловать, но это не волшебство;) Это называется синтаксисом «скобки»: http://www.senocular.com/?entry=241 – weltraumpirat

Смежные вопросы