2013-03-03 83 views
0

Inside 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; 
    } 
} 

,或者如果有一个更好的方式,将是巨大的。这看起来很笨重

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

回答

0

我居然写了entire article约一次。对于添加的每个DisplayObject,ADDED事件应该触发一次。你确定你没有使用ADDED_TO_STAGE,它不会冒泡吗?如果您使用的是ADDED_TO_STAGE,那么您需要将useCapture标志设置为true以使其为所有子级启动。

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

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

MPO是逻辑就是游戏键盘不应该知道也不关心它是如何工作的内部,老老实实它可能甚至不应该是游戏键盘的责任,处理简单的东西,如按钮切换状态和事物。这应该取决于按钮本身。如果按钮不需要切换或超出SimpleButton所处理的任何位置,则可以在库中而不是MovieClip中将按钮实例声明为Button,并免费获取所有这些东西,而不是自己编码。

作为一个很好的编码器的一部分是能够找出方法而不是来编码一切。

+0

谢谢艾米。更多信息,我使用Illustrator/Flash和JSFL生成00的电影镜头,然后使用JSFL扩展将它们分配给单个Piece符号(但保留其在场景中的排列)。而不是使用contextView ... addChild(件)的标准r-legs中介器/信号/命令结构,它现在是如何工作的 - 只是为了拥有更多的设计控制。我尝试了ADDED和ADDED_TO_STAGE,但没有使用捕获标记,我会尝试。 – MikeW 2013-03-03 22:05:15

+0

为什么不能再次定义over state功能? – 2013-03-03 22:24:09

+0

所有的状态都是在IDE内部的Piece时间轴上定义的,因此所有状态都可以正常工作。我还有另外两个状态是由robotlegs命令触发的(想想多人消息),叫做“我的”和“他们的” - 这是我试图设置的2个状态。它是唯一可以设置这些状态的板块上的最后一块 - 但我还没有尝试过您的captureFlag提案。 – MikeW 2013-03-04 00:21:55

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

+0

谢谢你 - 我会下载并在稍后在家中尝试 - 在游戏板的结构上添加一些评论。 – MikeW 2013-03-03 22:11:06