[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.ForcibleLoader;
  4     import flash.display.AVM1Movie;
  5     import flash.display.MovieClip;
  6     import flash.display.Shape;
  7     import flash.events.Event;
  8     import flash.display.Loader;
  9     import flash.net.URLRequest;
 10
 11     /**
 12      * ...
 13      * @author Frost.Yen
 14      */
 15     public class SwfPlayer extends MovieClip
 16     {
 17         private var _loader:Loader;
 18         private var _urlR:URLRequest;
 19         private var _url:String;
 20         private var _container:MovieClip;
 21         private var _mask:Shape;
 22         private var _forcibleLoader:ForcibleLoader;
 23         private var _stageW:Number;//swf实际的舞台宽度
 24         private var _stageH:Number;//swf实际的舞台高度
 25         public function SwfPlayer()
 26         {
 27             //遮罩加载swf舞台
 28             _mask = new Shape();
 29             _mask.graphics.beginFill(0);
 30             _mask.graphics.drawRect(0, 0, 10, 10);
 31             _mask.graphics.endFill();
 32             this.mask = _mask;
 33         }
 34         /**
 35          * 加载swf
 36          * @param url swf路径
 37          */
 38         public function load(url:String):void{
 39             this._url=url;
 40             _urlR=new URLRequest(_url);
 41             _loader=new Loader();
 42             _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
 43             _loader.load(_urlR);
 44         }
 45
 46         private function onComplete(event:Event):void {
 47             if (_loader.content is AVM1Movie) {//如果是as2.0或者1.0代码生成的swf
 48                 trace("_loader.content is AVM1Movie");
 49                 _loader.unloadAndStop();
 50                 _forcibleLoader = new ForcibleLoader(_loader);
 51                 _forcibleLoader.load(_urlR);
 52                 return;
 53             }
 54             trace(_loader.content);
 55             _container = MovieClip(_loader.content);
 56             _stageW = _loader.contentLoaderInfo.width;
 57             _stageH = _loader.contentLoaderInfo.height;
 58             _mask.width = _stageW;
 59             _mask.height = _stageH;
 60             this.addChild(_container);
 61             this.addChild(_mask);
 62             this.dispatchEvent(new Event(Event.COMPLETE));
 63         }
 64         /**
 65          * 播放下一帧
 66          */
 67         public function nextPlay():void{
 68             if(_container.currentFrame==_container.totalFrames){
 69                 stop();
 70             }
 71             else{
 72                 _container.nextFrame();
 73             }
 74         }
 75         /**
 76          * 播放上一帧
 77          */
 78         public function prevPlay():void{
 79             if(_container.currentFrame==1){
 80                 stop();
 81             }
 82             else{
 83                 _container.prevFrame();
 84             }
 85         }
 86         /**
 87          * 开始播放
 88          */
 89         public function startPlay():void
 90         {
 91             _container.play();
 92         }
 93         /**
 94          * 暂停播放
 95          */
 96         public function pausePlay():void
 97         {
 98             _container.stop();
 99         }
100         /**
101          * 卸载加载的swf
102          */
103         public function unloadAndStop():void
104         {
105             _loader.unloadAndStop();
106         }
107
108         public function get stageW():Number
109         {
110             return _stageW;
111         }
112
113         public function set stageW(value:Number):void
114         {
115             _stageW = value;
116         }
117
118         public function get stageH():Number
119         {
120             return _stageH;
121         }
122
123         public function set stageH(value:Number):void
124         {
125             _stageH = value;
126         }
127     }
128 }

然后在flash文档类Main.as中调用,flash文档舞台上有两个控制按钮stopBtn,playBtn:

 1 package
 2 {
 3     import com.views.SwfPlayer;
 4     import flash.display.Sprite;
 5     import flash.events.MouseEvent;
 6     /**
 7      * ...
 8      * @author Frost.Yen
 9      */
10     public class Main extends Sprite
11     {
12         private var _swfPlayer:SwfPlayer;
13         public function Main()
14         {
15             _swfPlayer = new SwfPlayer();
16             this.addChild(_swfPlayer);
17             _swfPlayer.load("D:/Flash学习/flash动画作品/1/1.swf");
18             stopBtn.addEventListener(MouseEvent.CLICK,onStop);
19             playBtn.addEventListener(MouseEvent.CLICK,onPlay);
20         }
21         private function onStop(e:MouseEvent):void
22         {
23             _swfPlayer.pausePlay();//暂停播放
24         }
25         private function onPlay(e:MouseEvent):void
26         {
27             _swfPlayer.startPlay();//开始播放
28         }
29     }
30 }

附:此类ForcibleLoader.as可到http://download.csdn.net/detail/yan_frost/4771007下载

时间: 2024-10-04 07:36:52

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

控制加载的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 201

as3.0中通过ApplicationDomain类获得被加载swf

as3.0中通过ApplicationDomain类获得被加载swf(转载) 首先先回顾一下FLASH的OO构成.对于FLASH,我们可以把任何的可视化元件都看成某个类文件的具体实例,包括swf文件.我们可以把swf文件看成一个类的具体实例,而它里面拥有个个其他类的实例对象,例如:我们新建一个loaded.fla文件,然后我们建立一个影片剪辑元件,你可以在它的内部做一些动画处理,打开库,单击元件右建,选择“链接”打开“链接属性”,在类的输入框里我们键入“myClass”. 这样一来我们就可以把这

html加载swf,代码模拟点击事件

一.背景 1.最近在做一个android端播放flash的应用,android设备没有屏幕,显示需通过HDMI连接.需要用到javascript与java之间的交互,android端接收flash传过来的fscommand 2.希望通过WebView加载html实现 二.遇到问题 1.通过html加载之后的动画,无论按哪个按键,swf文件都接收不到按键消息,既不能实现它本身的一些操作性功能 2.传过来的命令接收不到(有时间再分析这个,已经解决) 三.尝试方法 1.发现如果直接通过电脑端使用浏览器

混合模式程序集是针对“v1.1.4322”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。

看到一个kinect大牛编写的一个水果忍者的体感游戏版本,让我为自己一直以来只用现有的网页游戏来模拟kinect体感游戏控制感到惭愧,没办法,我还是菜鸟.学习一段后自己模仿星际大战这个游戏,自己写了一个模仿版(对这个游戏我想大家是不陌生的),但是当我开始添加有关kinect控制代码时,突然系统报错"混合模式程序集是针对"v1.1.4322"版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集",调断点看了下问题出在程序集引用上,因为是在

SQLite.dll混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。

其他信息: V5.7.4.4 Can't find the System.Data.SQLite.dll more info : 混合模式程序集是针对"v2.0.50727"版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集. 解决办法,web.config 添加

C#连接Sqlite 出现:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。的解决方案

C#连接Sqlite 出现: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集.的解决方案 C#连接sqlite数据库代码: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Data.SQLite; 6 using System.D

【转】Sqlite 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...

开发环境: vs2010+.net framework 4.0+ System.Data.SQLite.DLL (2.0)今天在做Sqlite数据库测试,一运行程序在一处方法调用时报出了一个异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集 其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了

<VS2010>混合模式程序集是针对“v2.0”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集

在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0时,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集 其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的System.Data.Sqlite这个数据

混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集

在使用.Net2.0和.Net4.0混合开发,启动应用程序时遇到了"混合模式程序集是针对"v2.0.50727"版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集."这个错误提示.解决方案如下: 在app.config中的configuration节内添加子节Startup,详细如下: <startup useLegacyV2RuntimeActivationPolicy="true"> <sup