23
2015
11

flash用代码控制影片剪辑的播放速度

之前项目中用到的一个类,重写了影片剪辑的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属性就可以了,其它和普通影片剪辑完全一样。


源码打包下载

« 上一篇下一篇 »

相关文章:

flash在课件开发中的优势  (2021-5-26 8:45:37)

批量设置flash中的图片无损平滑  (2020-12-21 19:14:49)

使用flash导出css精灵图(雪碧图)  (2020-12-21 19:5:21)

从flash中导出资源供pixijs使用  (2020-12-21 18:46:3)

闪电效果  (2017-11-28 15:4:19)

线段与椭圆的交点  (2017-1-6 14:43:41)

as3录制swf并保存flv视频  (2016-12-28 8:43:41)

解九连环  (2016-12-1 20:58:11)

as3实现setTimeout和trace  (2016-11-10 16:47:37)

registerCursor注册系统光标  (2016-9-14 9:49:40)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。