控制加载的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 [email protected]
	 *@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 [email protected]
	 *@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 类可以从网上下载。

时间: 2024-10-11 18:20:29

控制加载的swf动画暂停和播放的相关文章

[ActionScript 3.0] 如何控制加载swf动画的播放与暂停

此方法适用于用as 1.0或者as2.0以及as3.0编译的swf,因为as1.0和as2.0编译的swf是AVM1Movie类型,因此需要通过类ForcibleLoader.as将其转换为version 9以上的swf,注意,如果加载的swf是3.0代码编译的,且此swf用文档类编译,则文档类必须继承MovieClip,接下来看代码: 首先写一个加载swf的类SwfPlayer.as: 1 package com.views 2 { 3 import com.controls.utils.Fo

【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画

之前向大家介绍8款优秀的 jQuery 加载动画和进度条插件,今天这篇文章向大家推荐10个纯 CSS3 代码实现精美加载进度条动画效果的方案.加载动画和进度条在网站和 Web 应用中的使用非常流行,特别是在使用 Ajax 技术加载内容的应用场景中,使用时尚的加载动画和进度条告诉用户内容正在加载中是一种非常友好的方式. 您可能感兴趣的相关文章 20个非常绚丽的 CSS3 特性应用演示 23个纯 CSS3 打造的精美LOGO图案 35个让人惊讶的 CSS3 动画效果演示 推荐12个漂亮的 CSS3

【性能优化】懒、懒加载、懒动画 --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调

/* * * 扩展jq原型: 懒.懒加载.懒动画 * --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调 * * $jq.viewChange( {top:100,bottom:100,change:function(status){}} ) --- status: 'in'/'out' * $jq.viewChange('off') * * $jq[n].viewChange.status = 'in'/'out' ----- 状态为'

用C3中的animation和transform写的一个模仿加载的时动画效果

用用C3中的animation和transform写的一个模仿加载的时动画效果! 不多说直接上代码; html标签部分 <div class="wrap"> <h2>用C3中的animation和transform写的一个模仿加载的时动画效果</h2> <div class="demo"> <div></div> <div></div> <div></d

iOS 进度条、加载、安装动画 —— HERO博客

iOS 进度条.加载.安装动画简单实现. 首先看一下效果图: 下面贴上代码: 控制器ViewController: #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end /*** ---------------分割线--------------- ***/ #import "ViewController.h" #import "HWWaveView.h" #im

[ActionScript 3.0] AS3.0 Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain

实际应用中, Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain,需要择情况而定. 1.当加载的子swf中有流存在时,比如视频或者声音,则最好需要指定新的应用程序域ApplicationDomain,如果没有指定,调用_ldr.unloadAndStop();时无法将子swf中的流从内存中卸载掉,了解原因,请深入了解应用程序域ApplicationDomain,代码如下: var ldr:Loader = new Loader(); var context:L

复制外部加载的swf

复制外部加载的swf是一个相对高级的操作,步骤比较多,过程相对复杂,要阐述清楚原理细节需要很大篇幅的文字,因此,这里我就偷懒不详细写说明了,纯用代码来说明问题,希望对看得懂的朋友起到抛砖引玉的作用.方法1——ByteArray深度复制 var byteLoader:URLLoader = new URLLoader(); byteLoader.dataFormat = URLLoaderDataFormat.BINARY; byteLoader.addEventListener(Event.CO

ActionScript 3.0 加载外部SWF素材资源MovieClip,SimpleButton不支持鼠标事件

我们用flash buidler加载素材一般有三种途径: 1.SWC,这种方式会增大SWF的大小 2.flash cs项目关联 3.SWF专门放素材资源通过Loader方式加载 今天发现通过SWF加载方式有个问题要加载的素材如下图: A:是一个MC,里面放了一个B:mc,C:SimpleButton 问题:加载进A后对A添加鼠标事件如CLICK事件,单击B或C时没有反映? 开始我的加载方式是这样的: 目录结构如图: 代码如下: 1 package 2 { 3 import flash.displ

一个加载时带动画效果的ListBoxItem

原文:一个加载时带动画效果的ListBoxItem 今天我们来谈一下ListBoxItem这个控件,ListBoxItem是直接从ContentControl继承而来的,所以可以添加到任何具有Content属性的控件中去,常见的ListBoxItem可以放到ListBox中,也可以放到ItemsControl中去,ListBoxItem可以横向和TreeViewItem进行比较,只不过TreeViewItem是直接从HeaderedItemsControl继承过来的,然后再继承自ItemsCon