此方法适用于用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动画的播放与暂停的更多相关文章

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

    看到一个kinect大牛编写的一个水果忍者的体感游戏版本,让我为自己一直以来只用现有的网页游戏来模拟kinect体感游戏控制感到惭愧,没办法,我还是菜鸟.学习一段后自己模仿星际大战这个游戏,自己写了一 ...

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

    开发环境: vs2010+.net framework 4.0+ System.Data.SQLite.DLL (2.0)今天在做Sqlite数据库测试,一运行程序在一处方法调用时报出了一个异常 混合 ...

  3. 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. @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件

    目录 @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件 运行 使用 配置 svg-sprite-loader 调用当前环境下的颜色 props @vue/cl ...

  5. vue2.0无限滚动加载数据插件

      做vue项目用到下拉滚动加载数据功能,由于选的UI库(element)没有这个组件,就用Vue-infinite-loading 这个插件代替,使用中遇到的一些问题及使用方法,总结作记录! 安装: ...

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

    在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0时,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有 ...

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

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

  8. Spring中通过变量和import标签来控制加载哪些bean

    需求:根据设置变量,来加载某个spring的bean的配置文件,这个配置文件中,有某些使用的bean.在一些情况下,不希望这些bean被初始化和加载进context中,也不需要被外面访问到. 在spr ...

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

    “System.IO.FileLoadException”类型的未经处理的异常在 XXX.dll 中发生 其他信息: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的 ...

随机推荐

  1. Unity 导出NavMesh (可行走区域判定) 数据给服务器使用

    cp790621656 博客专家 Unity 导出NavMesh (可行走区域判定) 数据给服务器使用 发表于2016/9/26 18:15:11  1089人阅读 分类: Unity MMO 这个 ...

  2. Spring学习笔记(四)--MVC概述

    一. 飞机 最近马来西亚航空370号班机事故闹得沸沸扬扬,情节整的扑朔迷离,连我在钻研springMVC平和的心情都间接的受到了影响.正当我在想这个MVC的处理过程可以怎样得到更好的理解呢?灰机,灰机 ...

  3. RedHat 6 下配置网卡IP地址,Virtual Linux下配置网卡IP

    经常用到,自己Mark一下,顺带给需要的人参考. 1.配置文件修改 $ vi /etc/sysconfig/network-scripts/ifcfg-eth0 内容: DEVICE="et ...

  4. Linux hostname主机名配置文件与文件 /etc/hosts解析(copy来的,原作者看到了别打我)

    1.关于/etc/host,主机名和IP配置文件 Hosts - The static table lookup for host name(主机名查询静态表) hosts文件是Linux系统中一个负 ...

  5. 洛谷 P2850 [USACO06DEC]虫洞Wormholes 判负环

    虫洞(wormhole) FJ 在农场上闲逛时,发现他的农场里有很多虫洞.虫洞是一条特殊的有向路径,当 FJ 从它的一头走到另一头后,他将被传送到过去的某个时刻.FJ 的每个农场包括 N(1<= ...

  6. Redis安装及HA(High Availability)配置(转)

    出处:http://www.cnblogs.com/morvenhuang/p/4184262.html Redis是一种内存数据库,以KEY-VALUE(即键值对)的形式存储数据.这篇文章主要介绍的 ...

  7. InteliJ中文乱码;IDE快捷键使用

    启动服务器的时候出现如图 解决方法: 对服务器的位置进行编辑 增加如图的信息 -Dfile.encoding=UTF-8

  8. C++学习--第一个程序

    C++控制台应用程序 我们创建一个包含预编译头的C++控制台应用程序时,会发现其结构是这样的: 1)理解预编译头文件: 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件( ...

  9. Joomla3x-CKEditor4x-WordPaster整合示例

    1.1. 集成到Joomla_3.4.7-ckeditor4x 资源下载:Joomla 3x,   1.1.1. 添加wordpaster文件夹 路径:/media/wordpaster/   1.1 ...

  10. Reconstruction(三维重建)文件被修改

    修改内容: 该函数被修改了一部分,然后修改中止了,可能是牵一发而动全身,导致中止.无论什么原因,这个Reconstruction.cpp文件是唯一被修改的文件了.如果没有被修改该多好!!!!!! 如何 ...