控制加载的swf动画暂停和播放

外部加载进来的swf动画(无论是as2.0的还是as3.0的)可以控制暂停和播放,声音也能暂停和播放,但是注意的一点,导入的声音必须是“数据流”。请看以下代码:

Main.as:

package
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	
	/**
	 *@author hypo.chen
	 *@E-mail 645338868@qq.com
	 *@data 2015-9-6
	 */
	[SWF(frameRate="60",width="1024",height="768",backgroundColor="0x669966")]
	public class Main extends Sprite
	{
		private var _loadSwf:LoadSwfHandler;
		private var _playBtn:TextField;
		private var _stopBtn:TextField;
		public function Main()
		{
			_loadSwf = new LoadSwfHandler();
			this.addChild(_loadSwf);
			_loadSwf.loadSwf("assest/testAnimation.swf");
			this.addChild(setText("暂停",5,700,stop));
			this.addChild(setText("播放",50,700,go));
		}
		
		private function go(e:MouseEvent):void
		{
			_loadSwf.targetPlay();
		}
		
		private function stop(e:MouseEvent):void
		{
			_loadSwf.targetPause();
		}
		
		private function setText(_text:String,_x:Number = 0,_y:Number = 0,_fun:Function = null):TextField
		{
			var _textField:TextField = new TextField();
			_textField.text = _text;
			_textField.selectable = false;
			_textField.autoSize = "left";
			_textField.x = _x;
			_textField.y = _y;
			_textField.addEventListener(MouseEvent.CLICK,_fun);
			return _textField;
		}
	}
}

LoadSwfHandler.as:

package
{
	import com.cndragon.api.api.utils.ForcibleLoader;
	
	import flash.display.AVM1Movie;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.display.Shape;
	import flash.events.Event;
	import flash.net.URLRequest;
	
	/**
	 *@author hypo.chen
	 *@E-mail 645338868@qq.com
	 *@data 2015-9-6
	 */
	public class LoadSwfHandler extends MovieClip
	{
		private var _mask:Shape;
		private var _stageW:Number;
		private var _stageH:Number;
		private var _loader:Loader;
		private var _forcibleLoader:ForcibleLoader;
		private var _targetMC:MovieClip;
		private var _url:String;
		private var _urlR:URLRequest;
		public function LoadSwfHandler()
		{
			_mask = new Shape();
			_mask.graphics.beginFill(0xffffff,1);
			_mask.graphics.drawRect(0,0,10,10);
			_mask.graphics.endFill();
			this.mask = _mask;
		}
		
		public function loadSwf(_url:String):void
		{
			//加载swf
			this._url = _url;
			if(!_loader)
				_loader = new Loader();
			_urlR = new URLRequest(_url);
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onSwfLoaded);
			_loader.load(_urlR);
		}
		
		private function onSwfLoaded(e:Event):void
		{
			if(_loader.content is AVM1Movie)如果是as2.0或者1.0代码生成的swf那么需要通过ForcibleLoader进行处理
			{
				trace("_loader.content is AVM1Movie");
				_loader.unloadAndStop();
				_forcibleLoader = new ForcibleLoader(this._loader);
				_forcibleLoader.load(this._urlR);
				return;//这个return一定要加上,否则加载as2.0的或报错
			}
			
			_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onSwfLoaded);
			trace(_loader.content,_loader,"_loader");

			try
			{
				trace("try")
				_targetMC = MovieClip(_loader.content);
				this._stageW = _loader.contentLoaderInfo.width;
				this._stageH = _loader.contentLoaderInfo.height;
				this.addChild(_targetMC);
				trace(_targetMC.totalFrames);
			}
			catch(error:Error)
			{
				trace("error---------:" + error);
				this._stageW = _loader.width;
				this._stageH = _loader.height;
				this.addChild(_loader);
			}
			_mask.width = this._stageW;
			_mask.height = this._stageH;
			this.addChild(_mask);
		}
		/**
		 * 卸装加载的swf
		*/
		public function unloadAndStop():void
		{
			if(_loader)
			{
				_loader.unloadAndStop();
				_loader = null;
			}
			if(_targetMC)
			{
				_targetMC.parent.removeChild(_targetMC);
				_targetMC = null;
			}
		}
		public function targetPause():void
		{
			_targetMC.stop();
		}
		public function targetPlay():void
		{
			_targetMC.play();
		}
	}
}

还有一个ForcibleLoader.as 类可以从网上下载。

转载于:https://www.cnblogs.com/chen-mo/p/4786735.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值