[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”版的运行时生成的,在没有配置其他信息的 ...
随机推荐
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十六周
java学习第十六周-并发 本周,学习了Java中线程,并发的知识,在老师的带领下,进行了对知识的理解学习,以及对实验的运行讲解,对这一块内容掌握的还可以,在自主编程中,也能够完成.线, ...
- 高德地图-android 权限设置
转自http://blog.csdn.NET/eyu8874521/article/details/8481953 一个Android应用程序需要权限才能调用某些android系统的功能:一个andr ...
- Finite State Transducers
一, 简介 Finite State Transducers 简称 FST, 中文名:有穷状态转换器.在自然语言处理等领域有很大应用,其功能类似于字典的功能(STL 中的map,C# 中的Dictio ...
- hdu2516-取石子游戏 (斐波那契博弈)【博弈 二分查找】
http://acm.hdu.edu.cn/showproblem.php?pid=2516 取石子游戏 Time Limit: 2000/1000 MS (Java/Others) Memor ...
- python3--json反序列化
# Auther: Aaron Fan # 加载文件中的数据 import json with open('test.txt','r',encoding='utf-8') as f: info = j ...
- Oracle VirtualBox 问题汇总
1.打开虚拟机时报硬盘UUID 已经存在:错误信息: Cannot register the hard disk 'F:\VirtualBox VMs\cl-11r2-rac2\cl-11r2-rac ...
- IIS相关知识和经验的碎片化记录
1.IIS(Internet Information Services)网站本机可以访问,局域网其他机器无法访问 导致这个问题之一是防火墙规则,解决办法如下: [开始]打开[控制面板],选择[WIND ...
- 白盒测试实践项目(day3)
李建文同学的白盒缺陷报告已经提交,正在由组长胡俊辉同学进行审阅,查看并发现是否有什么不足,再由小组讨论补充. 汪鸿同学的静态代码工具熟悉已经初步完成,并且准备撰写文档. 杨瑞丰同学的Mock测试方法也 ...
- lnmp一键安装包 配置多站点
在/usr/local/nginx/conf/vhost下配置多站点的文件,一个站点对应一个文件,配置如下信息: vim ./vhost/test.conf server { listen ; ser ...
- javascript总结38: 神奇的this
1 this的特性 this 是在函数中的 this 的指向 是在函数调用的时候决定的 this的指向. 谁调用这个函数,函数中的this就指向谁 function fn (){ console.lo ...