私は減速してから、ムービークリップアニメーションASIG3を停止する必要があります。 停止ボタンをクリックすると減速が誘発されます。フラッシュAS3でムービークリップの速度を落として停止させますか?
誰でもこのための良いテクニックを知っていますか?私はこのタイプのライブラリを拒否する学校プロジェクトであるので、この効果のためにトゥイーンエンジンを使用することはできません。
私は減速してから、ムービークリップアニメーションASIG3を停止する必要があります。 停止ボタンをクリックすると減速が誘発されます。フラッシュAS3でムービークリップの速度を落として停止させますか?
誰でもこのための良いテクニックを知っていますか?私はこのタイプのライブラリを拒否する学校プロジェクトであるので、この効果のためにトゥイーンエンジンを使用することはできません。
あなたは、フレームレート低下することができます。
stage.frameRate = N;
をしかし、これは全体のあなたのSWFのフレームレートを減少することを、考慮に入れます。
私のために十分に単純な、このアプローチを使用 –
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
私のために働かなかった、 'myController.play(1.00)'はちょうど最初のフレームを表示し、まったく再生しませんでした。 –
私はコードを更新しました。それは今私のために働く。この行の最後の引数を取り除いたことに注意してください。 置き換えてください: if(!_ playing)_mc.addEventListener(Event.ENTER_FRAME、handleEnterFrame、false、0、true); with: if(!_ playing)_mc.addEventListener(Event.ENTER_FRAME、handleEnterFrame); – JulianG
私は、MovieClipsのループをサポートするための行も編集しました。この行を変更してください: _mc.gotoAndStop with: _mc.gotoAndStop(Math.round(_currentFrame%_mc.totalFrames)); – JulianG
最も簡単かつ論理的な方法は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度フラッシュ直接東ある)
タイムライントゥイーンでは、イージングの量を設定できます。 –
あなたはActionScriptの独自のTweenクラスを使うことはできませんでしたか? – weltraumpirat