getChildByName在mc内循环

时间:2013-05-07 13:28:07

标签: actionscript-3 flash actionscript

我正在尝试通过movieclip中的循环来获取getChildByName。

在库中我有一个名为PlayScreen的动画片段,在PlayScreen中,我有另一个名为Bg的动画片段。 PlayScreen由MainClass(类文档)放置在舞台上,PlayScreen链接到MainRun类。将Bg movieclip手动添加到PlayScreen中,方法是将其从库中拖入。

这是我的MainRun课程。

public class MainRun extends MovieClip
    {
        public var flyClone:Array;
        public var newFly:Fly_MC;
        public var spX:Number = 550;
        public var spY:Number = 400;

        public function MainRun() 
        {
            flyClone = new Array(); 
            for(var i:int=0; i<10; i++)
            {   
                newFly = new Fly_MC(Math.random()* spX, Math.random()* spY);
                flyClone.push(newFly);
                addChild(newFly);
                newFly.name = "fly_" + i;
            }
            //...

            bla();
        } 

这里我无法使getChildByName正常工作,它返回;错误#1009:无法访问空对象引用的属性或方法。     在MainRun / bla()

        public function bla():void
        {
            for(var j:int=0; j< numChildren; j++)
            {
               getChildByName("fly_" + j).addEventListener(Event.ENTER_FRAME, randomMove);
               //...
            }
        }

任何建议?

3 个答案:

答案 0 :(得分:1)

MovieClip对象的name属性必须是String值,但是你在那里放一个int。 尝试添加String(j);

最好使用你的flyClone数组,而不仅仅是通过它的名字获取对象。 图像如果您向DisplayList(addChild)添加任何其他内容将会发生什么。

for(var j:int=0; j< flyClone.length; j++)
{
   flyClone[j].addEventListener(...);
}

答案 1 :(得分:0)

for(var j:int=0; j< flyClone.length; j++)
{

   (flyClone[j] as MovieClip).addEventListener(Event.ENTER_FRAME, randomMove);
}

答案 2 :(得分:0)

我几乎肯定你有一个不是苍蝇的孩子。

public function bla():void
{
    for(var j:int=0; j< numChildren; j++)
    {
       var fly : Fly_MC =  getChildByName("fly_" + j) as Fly_MC;
       if( fly )
       {
          fly.addEventListener(Event.ENTER_FRAME, randomMove);
       }
    }
}

你为什么不:

for each( var fly : Fly_MC in flyClone )
{
   fly.addEventListener(Event.ENTER_FRAME, randomMove);
}

或更好

addEventListener(Event.ENTER_FRAME, randomMoveFlies);

public function randomMoveFlies( e:Event ):void
{
   for each( var fly : Fly_MC in flyClone )
   {
   //move flies;
   }
}