无法访问影片剪辑中的子项

时间:2013-03-03 09:01:53

标签: actionscript-3 flash robotlegs

在flash cs6中我画了一个flash动画片段,我将导出设置设置为abc.Gameboard。在游戏板里面,我有一堆碎片(符号:Piece),我将其导出为abc.Piece - 基类设置为MovieClip和类文件。这件作品有框架标签,如点击,等等。我的问题是访问代码中的部分,所以我可以例如。 gotoAndPlay(“我的”) - 此刻活动只会发射一次,这是棋盘上的最后一块。 我可以在最后一件上设置框架动作,但想知道如何为每件作品做同样的事情。

我在舞台上添加了一个游戏板

var gb:Gameboard = new Gameboard();
gb.name = "gb001";
contextView.addChild(gb);

然后

contextView.addEventListener(Event.ADDED, thingAdded);

private function thingAdded(event:Event):void
{
    var type:String = event.target.toString();
    switch(type)
    {
        // this runs only once - i want it to run for each piece that is inside the symbol
        case "[object Piece]":

        var p:MovieClip = event.target as Piece;
        p.gotoAndPlay("mine");
        break;
    }
}

或者如果有更好的方式会很棒......这看起来很笨重

编辑:了解有关我如何构建游戏手柄的更多信息 在插画家中绘制一组形状 - 掩盖它(游戏板区域)。以图形形式导入Flash。将图形转换为多个影片剪辑符号(因此JSFL可以向下钻取并访问蒙版片段) - 运行JSFL脚本&创造00件。然后我在Piece和Gameboard上设置导出设置,并将Gameboard添加到contextView。

2 个答案:

答案 0 :(得分:0)

在他们的Gameboard里面?我想知道你的Gameboard结构。

如果你是对的。试试这个:

function thingAdded(e:Event):void
{
    if(!e.target is Gameboard) return;

    var mc:Gameboard = Gameboard(e.target);

    var i:int = 0;
    while(i<mc.numChildren)
    {
        if( mc.getChildAt(i) is Piece)
        {
            var piece:Piece = Piece(mc.getChildAt(i));

            piece.gotoAndStop(2);
        }
        i++;
    }
}

以下是我的示例代码:Gameboard

答案 1 :(得分:0)

我实际上曾写过entire article一次。 ADDED事件应为每个添加的DisplayObject触发一次。你确定你没有使用ADDED_TO_STAGE,它不会冒泡吗?如果你正在使用ADDED_TO_STAGE,那么你需要将useCapture标志设置为true以使其为所有孩子开火。

如果你想在这个过程中涉及RobotLegs,可能更好的方法是简单地为你想要以不同方式表现的每个特定按钮创建一个“标记”类,然后为每个要为其注册的类注册一个中介。管理行为。 Robotlegs已经内置了钩子来监听ADDED_TO_STAGE并执行此操作。

但是,你也可以考虑使用Flash IDE来实现它的目的,这就是把东西放在舞台上。在这种情况下,您的GameBoard实例将在主文档Class的构造函数中准备好,以便您随意执行任何操作。

MPO是 Gameboard之外的逻辑不应该知道或关心它在内部是如何工作的,老实说,它可能甚至不应该是GameBoard有责任处理诸如按钮状态和事物之类的简单事情。这应该取决于按钮本身。如果按钮不需要切换或者除了SimpleButton处理之外的任何东西,你可以在库中将按钮实例声明为Button而不是MovieClip并免费获取所有这些东西而不是自己编码。

成为优秀编码员的一部分是能够找出的方式来编码所有内容。