Как я могу получить все MC на сцене в AS3? - PullRequest
1 голос
/ 04 августа 2011

Как я могу получить все MC на сцене?

Я хочу вызвать addEventListener для всех MovieClip, присутствующих на моем этапе, и, если это возможно, в выбранном номере кадра моего сценария Что-то вроде этого псевдокода

for(i=0; nbOfChild ; i++)
   if(stage.childAt(i) is MC and isInTheFrameWithLabel('foo') )
     stage.childAt(i).addEventListerner(MyStuff)

Ответы [ 2 ]

9 голосов
/ 04 августа 2011

В значительной степени именно то, что у вас есть ..

for(var i:int = 0; i<numChildren; i++)
{
    var e:DisplayObject = getChildAt(i);
    if(e is MovieClip)
    {
        // do stuff with e
        trace(e);
    }
}

Вы также можете быть хитрым обманщиком и делать что-то вроде этого:

/**
 * Iterate through MovieClips within a container and parse them through handler
 * @param container The container to iterate through and find MovieClips in
 * @param handler A function that accepts MovieClip as its only parameter
 */
function each(container:DisplayObjectContainer, handler:Function):void
{
    for(var i:int = 0; i<container.numChildren; i++)
    {
        var e:DisplayObject = container.getChildAt(i);
        if(e is MovieClip) handler(e);
    }
}

// Example
each(this, function(mc:MovieClip):void
{
    trace(mc);
    mc.x += 10;
});
0 голосов
/ 04 августа 2011

Вы также должны поместить эти фрагменты ролика в массив, чтобы узнать фрагмент ролика, который вызвал событие, поэтому вам нужно:

var holdObjects:Array = new Array();
for(var i:int = 0; i<numChildren; i++)
{
    var e:DisplayObject = getChildAt(i);
    if(e is MovieClip)
    {
        // do stuff with e
        trace(e);
        e.addEventlistene(...);
        holdObjects.push(e);
    }
}
...