之前项目中用到的一个类,重写了影片剪辑的play、stop、gotoAndPlay、gotoAndStop方法,可以通过设置delay来改变元件的播放速度。
代码如下。
package
{
import flash.display.MovieClip;
import flash.events.TimerEvent;
import flash.utils.Timer;
/**
* ...
* @author hanyeah
* 重写play、stop、gotoAndPlay、gotoAndStop方法,可以通过设置delay来改变元件的帧频
*/
public class HMovieClip extends MovieClip
{
private var _delay:Number = 40;
private var _timer:Timer;
private var _time:Number;
public function HMovieClip()
{
super.stop();
_time = new Date().getTime();
_timer = new Timer(_delay, 0);
_timer.addEventListener(TimerEvent.TIMER, onTimerHandler);
_timer.start();
}
//-----------------------------------------
override public function play():void
{
_time = new Date().getTime();
_timer.start();
}
override public function stop():void
{
_timer.stop();
}
override public function gotoAndPlay(frame:Object, scene:String = null):void
{
super.gotoAndStop(frame, scene);
_time = new Date().getTime();
_timer.start();
}
override public function gotoAndStop(frame:Object, scene:String = null):void
{
super.gotoAndStop(frame, scene);
_timer.stop();
}
//--------------------------------------
/**
* 设置delay,两帧之间的时间间隔,1000/delay即帧频
*/
public function get delay():Number
{
return _delay;
}
public function set delay(value:Number):void
{
_delay = value;
_timer.delay = _delay;
}
//--------------------------------------
private function onTimerHandler(e:TimerEvent):void
{
//trace(currentFrame);
var _curTime:Number = new Date().getTime();
var _lastTime:Number = _time;
var dif:Number = _curTime-_time;
if (dif >= delay) {
var n:int = int(dif / delay);
var curF:int = (currentFrame + n) % (totalFrames + 1);
gotoAndPlay(curF);
_time = _lastTime +n*delay;
}
}
}
}写的略微麻烦,其实没必要用Date,由于某个项目需要精确计时,所以改用了Date来做计时器。
可以直接让影片剪辑继承该类,需要改变影片剪辑的播放速度时,设置delay属性就可以了,其它和普通影片剪辑完全一样。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。