控制加载AS 3.0中的嗖嗖动画

问题描述:

我正在开发一个AS 3.0包装添加一些额外的东西,必须加载一些旧的和普通的帧框架SwishMax 3动画,然后能够阻止他们,播放他们,等等...控制加载AS 3.0中的嗖嗖动画

这里是我的代码:

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()不会。哪里不对?

我测试了你的代码,它在我的机器上工作。我加载的SWF在主时间轴上有动画。 swishy.swf是否有可能不在主时间轴上的动画?也许动画是在另一个符号中,而该符号的一个实例在舞台上。无论如何,当您在上面的代码中调用stop()时,它只是告诉主时间轴停止,但舞台上的其他影片剪辑将继续前进。

我想这就是Simsoft所指出的。

我测试了你的代码,使用一个SWF,它在舞台上有一个带有动画的符号,并且我得到了你所描述的问题。

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

希望你没有嵌套在更深的层次更多的动画:我通过修改completeHandler()如下固定它。如果是这样的话,你必须修改这个以继续观察每个孩子的孩子,并试图阻止他们的时间表。

无论如何,希望有所帮助。祝你好运!

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(); 
     } 
     } 
    } 
+0

不...谢谢! – coma 2011-06-02 15:43:47