2010-03-01 36 views
0

我正在AS3编写一个纸牌游戏。我正在与之合作的艺术家制作了一张包含所有卡片图形和动画的swf文件(在Flash CS4中)。在FLA工作文件的结构看起来是这样的:在加载的SWF文件中访问另一个剪辑内的剪辑

- Scene 
    - CardGraphics (Movie Clip) 
    - CardFront 
    - CardBack 
    - CardValueImage (Movie Clip) 
    ... 

在程序创建我的卡类的52分的情况下,各自具有加载的SWF文件创建的MovieClip实例。我们的想法是将CardValueImage MovieClip的框架设置为与Card实例的套装和等级成员变量相对应。但是,我无法弄清楚我如何访问CardValueImage并调用gotoAndStop(或任何需要调用的方法)。

这基本上就是我想做的事:

// Card Class 
[Embed(source = 'CardGraphics.swf')] 
private static var CardsClip:Class; 
private var clip:MovieClip = new CardsClip; 

// Card Constructor 
this.valueImageFrame = suit * 13 + rank; // Calculate which frame contains the 
             // graphical representation of this card 
this.clip.CardValueImage.gotoAndStop(valueImageFrame); 

回答

1

尝试:

this.clip.getChildByName('CardValueImage').gotoAndStop(valueImageFrame); 

我不知道如果CardValueImage是,你有内部CardGraphics的影片剪辑实例名称,如果它是那么它应该工作:)

编辑: 要访问嵌入式瑞士法郎的时间表,你需要一个不同的方法,留下一个代码示例,和博客文章第在更详细地解释它。

package 
{ 
    import mx.core.ByteArrayAsset; 

    import flash.display.Loader; 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class App extends Sprite 
    { 
     [Embed(source = '../assets/CardGraphics.swf', mimeType="application/octet-stream")] 
     public static const CardsClip : Class; 

     public var loader : Loader = new Loader; 
     public var swfasset : ByteArrayAsset; 
     public var clip : MovieClip; 

     public function App() 
     { 
      swfasset = new CardsClip(); 
      loader.contentLoaderInfo.addEventListener(Event.INIT, loadCompleteListener, false, 0, true); 
      loader.loadBytes(swfasset); 
     } 

     private function loadCompleteListener(e : Event) : void 
     { 
      clip = MovieClip(loader.content); 

      var cardsGraphics:MovieClip = MovieClip(clip.getChildByName('CardsGraphics')); 
      var cardValueImage:MovieClip = MovieClip(cardsGraphics.getChildByName('CardValueImage')); 

      cardValueImage.gotoAndStop(2); 

      addChild(clip); 
     } 
    } 
} 

http://www.8bitrocket.com/newsdisplay.aspx?newspage=36607

*注意,代码更改为匹配您的方案。

+0

恐怕剪辑的唯一的孩子是一个Loader对象。 – Anders 2010-03-02 08:57:41

+0

你是对的,再次检查上面的答案,我已经更新了一种不同的方法,所以你可以访问嵌入式瑞士法郎的时间表。 – 2010-03-02 11:35:34

+0

感谢您的帮助。我解决了它,设置CardGraphics作为Flash CS4中的类导出并发布到swc文件。这样,我可以跳过使用“嵌入”,直接创建一个CardGraphics的实例。 CardValueImage剪辑显示为CardGraphics的一个属性,我可以像这样调用gotoAndStop: var cg:CardGraphics = new CardGraphics; cg.CardValueImage.gotoAndStop(...); – Anders 2010-03-02 13:38:13

1

Object(a.contentLoaderInfo.content)

例如,如果你有一个SWF文件,并想获得与实例名称some_name的象征。

package { 
     import flash.display.Loader; 
     import flash.display.MovieClip; 
     import flash.display.Sprite; 
     import flash.events.Event; 
     public class Main extends Sprite 
      { 
       [Embed(source="assets/YourMovie.swf", mimeType="application/x-shockwave-flash")] 
       private var ClassName:Class 

       private var mov:MovieClip 
       private var symbolFromSWF:MovieClip 
       public function Main() 
       { 
       mov=new ClassName(); 
       mov.addEventListener(Event.COMPLETE,onComp); 
       addChild(mov); 
       } 
       protected function onComp(event:Event):void 
       { 
       var a:Loader=Loader(mov.getChildAt(0)); 
       symbolFromSWF=Object(a.contentLoaderInfo.content).some_name; 
       } 
     } 
    }