0

我正在用 AS3 编写纸牌游戏。与我一起工作的艺术家(在 Flash CS4 中)制作了一个包含所有卡片图形和动画的 swf 文件。fla 工作文件的结构如下所示:

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

在程序中,我创建了 Card 类的 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);
4

2 回答 2

1

尝试:

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

我不确定 CardValueImage 是否是您在 CardGraphics 中拥有的影片剪辑的实例名称,如果是,那么它应该可以工作:)

编辑:要访问嵌入式 swf 的时间线,您需要一种不同的方法,留下代码示例和更详细解释它的博客文章。

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

*请注意,代码已更改以匹配您的场景。

于 2010-03-01T18:19:57.903 回答
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;
              }
         }
    }
于 2011-12-25T23:54:21.463 回答