Actionscript 3.0: создание массива имен экземпляров кнопок - PullRequest
0 голосов
/ 24 марта 2012

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

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

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Ваш код сломан более чем одним способом.

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
}
0 голосов
/ 25 марта 2012

Другое решение - просто наблюдать за их добавлением на сцену и захватывать их в этот момент, аналогично одному из примеров, который вы можете скачать здесь http://flexdiary.blogspot.com/2010/04/sample-code-for-oop-timeline-insideria.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...