Доступ к клипу внутри другого клипа в загруженном SWF-файле - PullRequest
0 голосов
/ 01 марта 2010

Я пишу карточную игру в AS3. Художник, с которым я работаю, создал (во Flash CS4) один SWF-файл, содержащий всю графику и анимацию карты. Структура рабочего файла fla выглядит примерно так:

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

В программе я создаю 52 экземпляра своего класса Card, каждый из которых имеет экземпляр MovieClip, созданный из загруженного SWF. Идея состоит в том, чтобы установить кадр мувиклипа CardValueImage в соответствии с переменными масти и ранга члена экземпляра карты. Однако я не могу понять, как получить доступ к CardValueImage и вызвать gotoAndStop (или любой другой метод, который мне нужно будет вызвать).

Это в основном то, что я хочу сделать:

* +1007 *

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

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;
              }
         }
    }
1 голос
/ 01 марта 2010

попробовать:

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

Я не уверен, является ли CardValueImage именем экземпляра мувиклипа, который у вас есть внутри CardGraphics, если это так, он должен работать:)

EDIT: чтобы получить доступ к временной шкале встроенного 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

* обратите внимание, что код был изменен в соответствии с вашим сценарием.

...