PDA

Просмотр полной версии : Как правильно работать с for each?


fantomasdnb
02.10.2011, 14:32
И так. На сцене лежит спрайт codeContainer, в нем есть спрайт codePlateSp. В него по нажатию кнопки добавляются спрайты типа commandBlock.


package
{
import flash.display.Sprite;
import flash.text.TextField;

public class commandBlock extends Sprite
{
public static var codeBlocksAmount:uint;
public static var added: Boolean;
public var command: String;

public function get getCommand():String
{
return command.concat(textF1.text, textF2.text);
}
}
}


далее из главного класса вызывается эта функция.

private function startPlayCode(event:MouseEvent):void
{
for each(var block:commandBlock in this.codeCont.codePlateSp)
{
trace(block.getCommand);
}
}


Я так делаю, чтобы собрать строки со всех commandBlock'ов. Но ничего не происходит. Вообще. Что не так?. Не хочу добавлять имена каждого в массив , потому что экземпляров может быть очень много.

scarbo
02.10.2011, 14:39
вот так надо:

var numChildren:uint = this.codeCont.codePlateSp.numChildren;
for(var i:uint = 0; i < numChildren; i++){
var block:commandBlock = this.codeCont.codePlateSp.getChildAt(i) as commandBlock;
trace(block.getCommand);
}
То есть дети контейнера, не являются его свойством, соответственно их нельзя извлечь через оператор "."

P.S. несколько замечаний:
1)цикл for, быстрее цикла for each
2)для более быстрого перебора детей контейнера, их лучше сложить в Vector, а не getChildAt юзать.