[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”版的运行时生成的,在没有配置其他信息的 ...
随机推荐
- keepalived之vrrp_script详解
通常情况下,利用keepalived做热备,其中一台设置为master,一台设置为backup.当master出现异常后,backup自动切换为master.当backup成为master后,mast ...
- 前端中this的用法
this指的是方法下的所有参数 handleDelete(record){ this.XXX.AAA (这个this.XXX指的是handleDelete这个方法的所有参数) (let self = ...
- Vue+WebPack游戏设计:自动背景贴图和游戏主循环的实现
- cdoj32-树上战争(Battle on the tree) 【记忆化搜索】
http://acm.uestc.edu.cn/#/problem/show/32 树上战争(Battle on the tree) Time Limit: 12000/4000MS (Java/Ot ...
- 【LA 3989 训练指南】女士的选择 【稳定婚姻问题】
我们先来学一下稳定婚姻问题 什么是稳定婚姻问题? 有n个女士和n个男士,他们要一一进行配对.每个男士心中对这n个女士都有一个排名,同理,每个女士心里对n个男性也有一个排名.我们要做的是,在他们配对完成 ...
- CentOS 6.4一键自动化安装ISO镜像光盘
下载CentOS-6.4-x86_64-minimal.iso 1 http://mirrors.163.com/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-mi ...
- mongodb修改用户名密码
首先先将启动mongo的配置文件里面的 auth:用户认证,改为false. 正确做法,利用db.changeUserPassword db.changeUserPassword('tank2','t ...
- loadrunner中回放log看不到参数替代后具体数值
1.打开run-time settings,找到 log - always send messages,选择 extended log--parameter substitution.
- [C++] const inside class VS const outside class
const inside class VS const outside class 类内:类内的const和c语言一样,可以通过指针间接修改const变量的值,读内存,一开始必须初始化 类外:虽然可以 ...
- Go语言特性
1.入口,go有且只有一个入口函数,就是main函数 liteide (IDE)的 一个工程(文件夹)只能有且只有一个main函数 package main import "fmt" ...