Управление загруженной анимацией свиста в AS 3.0 - PullRequest
0 голосов
/ 02 июня 2011

Я разрабатываю оболочку AS 3.0 для добавления некоторых дополнительных вещей, которые должны загружать некоторые старые и простые кадры в кадры анимаций SwishMax 3, а затем иметь возможность их останавливать, воспроизводить и т. Д.1002 * Вот мой код:

package {

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display.Loader;
    import flash.display.MovieClip;
    import flash.net.URLRequest;
    import flash.events.*;

    [SWF(backgroundColor="#ffffff", frameRate="17", width="300", height="250")]

    public class SwishMaxWrapper extends Sprite {

        function SwishMaxWrapper() {

            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            addChild(loader);

            var request:URLRequest = new URLRequest("swishy.swf");
            loader.load(request);

        }

        private function completeHandler(event:Event):void {

            var movie:MovieClip = event.target.content;
            movie.stop();

        }

    }

}

Анимационная загрузка работает, как и ожидалось, но movie.stop () - нет.Что не так?

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

Я проверил ваш код, и он работает на моей машине.SWF, который я загрузил, имел свою анимацию на главной временной шкале.Возможно ли, что swishy.swf имеет анимацию, которая не находится на основной временной шкале?Возможно, анимация в другом символе, а экземпляр этого символа находится на сцене.В любом случае, когда вы вызываете stop () в приведенном выше коде, он просто говорит основной временной шкале об остановке, но другие видеоклипы на сцене будут продолжать работать.

Я думаю, это то, на что указывал Simsoft.

Я протестировал ваш код, используя SWF, на сцене которого был символ с анимацией, и у меня возникла проблема, которую вы описываете.Я исправил это, изменив completeHandler() следующим образом:

public function completeHandler(event:Event):void {

    var movie:MovieClip = event.target.content;
    movie.stop();  //doesn't work - main timeline is only one frame long

    for(var i:int = 0; i<movie.numChildren; i++) {
        var child:MovieClip = movie.getChildAt(i) as MovieClip;
        if(child) {  //need this test - if the cast to MovieClip fails, child will be null
            child.stop(); //works
        }
    }
}

Надеюсь, у вас нет больше анимации, вложенной в более глубокие слои.Если это так, вам придется изменить это, чтобы продолжать вглядываться в детей каждого ребенка и пытаться остановить их сроки.

В любом случае, надеюсь, это поможет.Удачи!

0 голосов
/ 02 июня 2011

stop () не повторяется, я думаю, что проблема здесь.

 function ruleThemAll(target : DisplayObjectContainer, doStop : Boolean = true) : void
   {
      for(var i : uint = 0; i < target.childNum; ++i)
      {
         var child : DisplayObject = target.getChildAt(i);

         // If it's a container, go into to stop children
         if(child is DisplayObjectContainer)
            ruleThemAll(child as DisplayObjectContainer, doStop);

         if(child is MovieClip)
         {
             if(doStop)
                MovieClip(child).stop();
             else
                MovieClip(child).play();
         }
      }
   }
...