2011-12-08 8 views
1

私は減速してから、ムービークリップアニメーションASIG3を停止する必要があります。 停止ボタンをクリックすると減速が誘発されます。フラッシュAS3でムービークリップの速度を落として停止させますか?

誰でもこのための良いテクニックを知っていますか?私はこのタイプのライブラリを拒否する学校プロジェクトであるので、この効果のためにトゥイーンエンジンを使用することはできません。

+0

タイムライントゥイーンでは、イージングの量を設定できます。 –

+0

あなたはActionScriptの独自のTweenクラスを使うことはできませんでしたか? – weltraumpirat

答えて

0

あなたは、フレームレート低下することができます。

stage.frameRate = N; 

をしかし、これは全体のあなたのSWFのフレームレートを減少することを、考慮に入れます。

+0

私のために十分に単純な、このアプローチを使用 –

1

MovieClipを自由に再生するのではなく、制御できます。

ここでは、(myAnimationがすでにステージに追加されると仮定した場合)

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 

    public class MovieClipController 
    { 
     private var _mc:MovieClip; 
     private var _playing:Boolean; 
     private var _speed:Number; 
     private var _currentFrame:Number; 

     public function MovieClipController(mc:MovieClip) 
     { 
      _mc = mc; 
      _mc.stop(); 
      _currentFrame = _mc.currentFrame; 
     } 

     public function play(speed:Number = 1):void 
     { 
      if(!_playing) _mc.addEventListener(Event.ENTER_FRAME, handleEnterFrame); 
      _playing = true;    
      _speed = speed; 
     } 

     public function stop():void 
     { 
      if(_playing) _mc.removeEventListener(Event.ENTER_FRAME, handleEnterFrame); 
      _playing = false;   
      _mc.stop(); 
     } 

     public function get speed():Number 
     { 
      return _speed; 
     } 

     private function handleEnterFrame(e:Event):void 
     { 
      if (_playing) 
      { 
       _currentFrame += _speed; 
       _mc.gotoAndStop(Math.round(_currentFrame % _mc.totalFrames));    
      } 
     } 


    } 

} 

使い方使用できるクラスです。これにアプローチする

var myController:MovieCLipController = new MovieClipController(myAnimation); 

... 

myController.play(1.00); // plays animation at 100% speed 

... 

myController.play(0.50); // plays animation at 50% speed 

... 

myController.play(0.10); // plays animation at 10% speed, etc 

... 

myController.play(myController.speed * 0.90); // decrease speed by 10 percent. 

... 

myController.play(myController.speed - 0.10); // decrease speed by 10 percentage points 
+0

私のために働かなかった、 'myController.play(1.00)'はちょうど最初のフレームを表示し、まったく再生しませんでした。 –

+0

私はコードを更新しました。それは今私のために働く。この行の最後の引数を取り除いたことに注意してください。 置き換えてください: if(!_ playing)_mc.addEventListener(Event.ENTER_FRAME、handleEnterFrame、false、0、true); with: if(!_ playing)_mc.addEventListener(Event.ENTER_FRAME、handleEnterFrame); – JulianG

+0

私は、MovieClipsのループをサポートするための行も編集しました。この行を変更してください: _mc.gotoAndStop with: _mc.gotoAndStop(Math.round(_currentFrame%_mc.totalFrames)); – JulianG

0

最も簡単かつ論理的な方法はvelocity性質を持っていることですが、それを減らすことができます。ここでは、そのようなプロパティが含まれている可能性があり、クラスがある:

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 

    public class PhysicsMovieClip extends MovieClip 
    { 
     // Properties 
     private var _velocity:Number = 0; 
     private var _angle:Number = 0; 
     public var velocityTarget:Number = 0; 


     /** 
     * Constructor 
     */ 
     public function PhysicsMovieClip() 
     { 
      addEventListener(Event.ENTER_FRAME, _handle); 
     } 


     /** 
     * ... 
     * @param e Event.ENTER_FRAME 
     */ 
     private function _handle(e:Event):void 
     { 
      _velocity -= (_velocity - velocityTarget)/10; 

      x += Math.cos(_angle) * _velocity; 
      y += Math.sin(_angle) * _velocity; 
     } 


     /** 
     * Getters & Setters 
     */ 
     public function get angle():Number{ return _angle * 180/Math.PI; } 
     public function set angle(value:Number):void 
     { 
      _angle = value/180 * Math.PI; 
     } 
    } 
} 

上記あなたはスローダウンしたり、オブジェクトをスピードアップしますvelocityTargetプロパティを変更できるようになります。

例:

var mc:PhysicsMovieClip = new PhysicsMovieClip(); // assign graphics somewhere 
addChild(mc); 


mc.velocityTarget = 10; // the MovieClip will speed up 

あなたはそうのような上方angleプロパティを設定することにより、運動の方向を変更することができます:

mc.angle = 90; // movement is now directly south 
mc.angle = 270 // movement is now directly north 

(0度フラッシュ直接東ある)

関連する問題