[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:
package com.views
{
import com.controls.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 Frost.Yen
*/
public class SwfPlayer extends MovieClip
{
private var _loader:Loader;;
private var _urlR:URLRequest;
private var _url:String;
private var _container:MovieClip;
private var _mask:Shape;
private var _forcibleLoader:ForcibleLoader;
private var _stageW:Number;//swf实际的舞台宽度
private var _stageH:Number;//swf实际的舞台高度
public function SwfPlayer()
{
_mask = new Shape();
_mask.graphics.beginFill(0);
_mask.graphics.drawRect(0, 0, 10, 10);
_mask.graphics.endFill();
this.mask = _mask;
}
/**
* 加载swf
* @param url swf路径
*/
public function Load(url:String):void{
this._url=url;
if(!_loader){
_loader= new Loader()
}
_urlR=new URLRequest(_url);
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
_loader.load(_urlR);
} private function onComplete(event:Event):void { if (_loader.content is AVM1Movie) {//如果是as2.0或者1.0代码生成的swf
trace("_loader.content is AVM1Movie");
_loader.unloadAndStop();
_forcibleLoader = new ForcibleLoader(_loader);
_forcibleLoader.load(_urlR);
return;
}
_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onComplete);
trace(_loader.contentLoaderInfo,_loader,"_loader");
try
{
_container = MovieClip(_loader.content);
_stageW = _loader.contentLoaderInfo.width;
_stageH = _loader.contentLoaderInfo.height;
this.addChild(_container);
}
catch(error:Error)
{
trace(_loader.width,"_loader.width"); _stageW = _loader.width;
_stageH = _loader.height;
this.addChild(_loader);
} _mask.width = _stageW;
_mask.height = _stageH; this.addChild(_mask);
this.dispatchEvent(new Event(Event.COMPLETE));
}
/**
* 播放下一帧
*/
public function nextPlay():void{
if(_container.currentFrame==_container.totalFrames){
stop();
}else{
_container.nextFrame();
}
}
/**
* 播放上一帧
*/
public function prevPlay():void{
if(_container.currentFrame==1){
stop();
}else{
_container.prevFrame();
}
}
/**
* 开始播放
*/
public function startPlay():void
{
_container.play();
}
/**
* 暂停播放
*/
public function pausePlay():void
{
_container.stop();
} /**
* 卸载加载的swf
*/
public function unloadAndStop():void
{ if(_loader){
_loader.unloadAndStop();
_loader = null; }
if(_container){
_container.parent.removeChild(_container);
_container = null;
} } public function get stageW():Number
{
return _stageW;
} public function set stageW(value:Number):void
{
_stageW = value;
} public function get stageH():Number
{
return _stageH;
} public function set stageH(value:Number):void
{
_stageH = value;
} } }
然后在flash文档类Main.as中调用,flash文档舞台上有两个控制按钮stopBtn,playBtn:
package
{
import com.views.SwfPlayer;
import flash.display.Sprite;
import flash.events.MouseEvent;
/**
* ...
* @author Frost.Yen
*/
public class Main extends Sprite
{
private var _swfPlayer:SwfPlayer;
public function Main()
{
_swfPlayer = new SwfPlayer();
this.addChild(_swfPlayer);
_swfPlayer.load("D:/Flash学习/flash动画作品/1/1.swf");
stopBtn.addEventListener(MouseEvent.CLICK,onStop);
playBtn.addEventListener(MouseEvent.CLICK,onPlay);
}
private function onStop(e:MouseEvent):void
{
_swfPlayer.pausePlay();//暂停播放
}
private function onPlay(e:MouseEvent):void
{
_swfPlayer.startPlay();//开始播放
}
}
}
附:此类ForcibleLoader.as可到http://download.csdn.net/detail/yan_frost/4771007下载
[ActionScript 3.0] 如何控制加载swf动画的播放与暂停的更多相关文章
- VS报错之混合模式程序集是针对“v1.1.4322”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
看到一个kinect大牛编写的一个水果忍者的体感游戏版本,让我为自己一直以来只用现有的网页游戏来模拟kinect体感游戏控制感到惭愧,没办法,我还是菜鸟.学习一段后自己模仿星际大战这个游戏,自己写了一 ...
- 【转】Sqlite 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...
开发环境: vs2010+.net framework 4.0+ System.Data.SQLite.DLL (2.0)今天在做Sqlite数据库测试,一运行程序在一处方法调用时报出了一个异常 混合 ...
- SQLite.dll混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
其他信息: V5.7.4.4 Can't find the System.Data.SQLite.dll more info : 混合模式程序集是针对"v2.0.50727"版的运 ...
- @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件
目录 @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件 运行 使用 配置 svg-sprite-loader 调用当前环境下的颜色 props @vue/cl ...
- vue2.0无限滚动加载数据插件
做vue项目用到下拉滚动加载数据功能,由于选的UI库(element)没有这个组件,就用Vue-infinite-loading 这个插件代替,使用中遇到的一些问题及使用方法,总结作记录! 安装: ...
- <VS2010>混合模式程序集是针对“v2.0”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集
在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0时,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有 ...
- C#连接Sqlite 出现:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。的解决方案
C#连接Sqlite 出现: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集.的解决方案 C#连接sqlite数据库代码 ...
- Spring中通过变量和import标签来控制加载哪些bean
需求:根据设置变量,来加载某个spring的bean的配置文件,这个配置文件中,有某些使用的bean.在一些情况下,不希望这些bean被初始化和加载进context中,也不需要被外面访问到. 在spr ...
- c# .netframwork 4.0 调用 2.0时报错 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
“System.IO.FileLoadException”类型的未经处理的异常在 XXX.dll 中发生 其他信息: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的 ...
随机推荐
- zookeeper 面试题2 比较乱
Zookeeper是什么框架分布式的.开源的分布式应用程序协调服务,原本是Hadoop.HBase的一个重要组件.它为分布式应用提供一致性服务的软件,包括:配置维护.域名服务.分布式同步.组服务等.应 ...
- combotree 满足条件的节点不可选中
combotree: $("#Parent").treegrid("unselect");
- 导入excel精华版
//须引入 NPOI, NPOI.OOXML, NPOI.Openxml4Net, NPOI.OpenxmlFormats等程序集 自己去下载吧 NPOI组件很好用不可能下不到自己去吧,通常去百度网盘 ...
- HBase中的TTL与MinVersion的关系
HBase版本:1.3.1 TTL(Time-To-Live):每个Cell的数据超时时间(当前时间 - 最后更新的时间) MinVersion:如果当前存储的所有时间版本都早于TTL,至少MIN_V ...
- C++中的深拷贝和浅拷贝 QT中的深拷贝,浅拷贝和隐式共享
下面是C++中定义的深,浅拷贝 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况都会 ...
- Redis与Java的链接Jedis(二)
就像jdbc跟java链接数据库一样 redis跟java链接最好的工具就是Jedis 相关资源下载:https://github.com/xetorthio/jedis 正常建立java项目, 导入 ...
- Web图片编辑控件发布-Xproer.ImageEditor
版权所有 2009-2014 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com 产品首页:http://www.ncmem.com/webplug/image-e ...
- IIC接口总线
转载:http://www.eefocus.com/article/08-07/48416s.html图11-1给出一个由MCU作为主机,通过IIC总线带3个从机的单主机IIC总线系统.这是最常用.最 ...
- Javascript事件触发顺序
html标签是有子和父的,这个时候就出现了事件触发顺序的问题,比如: <!DOCTYPE html> <html> <head> <style> .fi ...
- Android-ContentProvider简单的增删改查
注意:在ContentProvider里面写对数据库增删改查的时候,千万不能 db.close(); cursor.close(); 等操作,不然其他应用访问不到数据,也没有必要写isOpen(); ...