[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”版的运行时生成的,在没有配置其他信息的 ...
随机推荐
- 【LA3126 训练指南】出租车 【DAG最小路径覆盖】
题意 你在一座城市里负责一个大型活动的接待工作.明天将有m位客人从城市的不同的位置出发,到达他们各自的目的地.已知每个人的出发时间,出发地点和目的地.你的任务是用尽量少的出租车送他们,使得每次出租车接 ...
- Codeforces 1154G 枚举
题意:给你一堆数,问其中lcm最小的一对数是什么? 思路:因为lcm(a, b) = a * b / gcd(a, b), 所以我们可以考虑暴力枚举gcd, 然后只找最小的a和b,去更新答案即可. 数 ...
- UITextView设置占位文字
这里只介绍一种,这种方便扩展,可以占位文字颜色. 我们继承一个UITextView: #import <UIKit/UIKit.h> @interface MyTextView : UIT ...
- SpringBoot28 RabbitMQ知识点、Docker下载RabbitMQ、SpringBoot整合RabbtiMQ
1 RabbitMQ知识点 1.1 整体架构图 消息生产者将消息投递到exchange中,exchange会以某种路由机制将生产者投递的消息路由到queue中,消息消费者再从queue中获取消息进行消 ...
- c# ftp 上传文件 与 下载文件
接着上一篇说. 上一篇说了根据配置文件获取路径,并判断路径在服务器中是否存在.如果不存在则在服务器中建立一个. 然后就是往路径下面传输文件了.. 代码: //连接ftp private void Co ...
- 更改IDEA高亮字体背景颜色
IDEA工具中依次进入file -> settings -> editor -> colors Scheme -> general,在右侧窗口中将result.i 都改成自己 ...
- pkg-config的妙用
1.每个lib下都会有个pkg-config文件夹,里面有相应pc文件 修改里面内容可以改变pkg-config显示 2.将.pc文件所在路径添加到PKG_CONFIG_PATH中如: export ...
- SQL 数据库 学习 003 什么是数据库? 为什么需要数据库?是不是所有的软件都是用Sql Server?
什么是数据库? 为什么需要数据库? 是不是所有的软件都是用Sql Server? 我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Exp ...
- C#在控制台输出异常所在的行数
对于异常,我们经常用try-catch语句来处理,一种常见的方式是在catch语句块用MessageBox.Show("异常")这种弹窗的方式来报告异常.但是有些时候,有些异常发生 ...
- DOM0级与DOM2级
定义: 0级DOM 分为2个:一是在标签内写onclick事件 二是在JS写onlicke=function(){}函数 1) <input id="myButton" t ...