我需要放慢速度,然後停止一個影片剪輯動畫us3 AS3。 單擊停止按鈕將觸發減速。減慢並停止閃存AS3中的影片剪輯?
任何人都知道一個很好的技術呢?我不能使用補間引擎來達到這種效果,因爲這是一個否認這種類型的圖書館的學校項目。
我需要放慢速度,然後停止一個影片剪輯動畫us3 AS3。 單擊停止按鈕將觸發減速。減慢並停止閃存AS3中的影片剪輯?
任何人都知道一個很好的技術呢?我不能使用補間引擎來達到這種效果,因爲這是一個否認這種類型的圖書館的學校項目。
可以降低幀率:
stage.frameRate = N;
但是考慮到,這會降低你的整體SWF的幀率。
對我來說足夠簡單,使用這種方法 –
您可以控制MovieClip,而不是讓它自由播放。
這裏是你可以使用一個類
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));
}
}
}
}
用法(假設myAnimation已經添加到舞臺):解決這個
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)'剛剛顯示第一幀,根本沒有播放。 –
我已經更新了代碼。現在它適用於我。請注意,我刪除了這一行中的最後一個trhee參數。 請替換: if(!_ playing)_mc.addEventListener(Event.ENTER_FRAME,handleEnterFrame,false,0,true); with: if(!_ playing)_mc.addEventListener(Event.ENTER_FRAME,handleEnterFrame); – JulianG
我現在還編輯了一行來支持循環動畫片段。 更改此行: _mc.gotoAndStop(Math.round(_currentFrame)); 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