AS3获取SWF文件中AS链接

游戏中经常使用到SWF美术,但SWF文件中,会有多个元件,每个元件对应一个指定AS链接,一个元件还会有多个图层。在实际操作中,会出现要求显示一个指定元件,并在该动画资源中,有的动画要求加鼠标事件,有的则不加任何事件,即指定图层的调用。既要求过场动画的欢洽,又要求交互事件的鼠标点击时的动画效果以及配音,这里提供一个简单范例,实现代码如下:

SWF文件加载类,LoaderSwf:

  1 package
  2 {
  3     import flash.display.Bitmap;
  4     import flash.display.BitmapData;
  5     import flash.display.Loader;
  6     import flash.display.LoaderInfo;
  7     import flash.display.MovieClip;
  8     import flash.display.SimpleButton;
  9     import flash.display.Sprite;
 10     import flash.events.Event;
 11     import flash.events.MouseEvent;
 12     import flash.net.URLRequest;
 13     import flash.system.ApplicationDomain;
 14     import flash.system.LoaderContext;
 15
 16     // 参考网址:http://blog.csdn.net/jrg_2008/article/details/49496185
 17
 18     [SWF(frameRate=‘25‘,width="1280", height="793")]
 19     public class LoaderSwf extends Sprite
 20     {
 21         private var _MovLoader:Loader;    //    加载swf文件
 22         private var _Skin:MovieClip;    //    指定AS链接
 23         private var _audio:VoicePlay = new VoicePlay();
 24         private var _xmlList:XmlProject = new XmlProject();
 25         private var count:int = 0;
 26
 27
 28         //构造函数
 29         public function LoaderSwf()
 30         {
 31             loadMcSWF();
 32         }
 33
 34         //加载swf
 35         private function loadMcSWF():void
 36         {
 37             _MovLoader = new Loader;
 38
 39             /*    新建应用程序域    */
 40             var context:LoaderContext = new LoaderContext();
 41             context.applicationDomain = new ApplicationDomain();
 42
 43             /*    开始加载swf      */
 44             _MovLoader.load(new URLRequest("U2_amazed.swf"),context);
 45
 46             /*    添加事件响应,在swf加载完毕后再获取里面的资源        */
 47             _MovLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
 48         }
 49
 50         private function onComplete(e:Event):void
 51         {
 52             /*    获得加载器的应用程序域    */
 53             var domain:ApplicationDomain = (e.currentTarget as LoaderInfo).applicationDomain;
 54
 55             /*    获取指定(b3u3p2_1a)的AS链接的影片剪辑  */
 56             var cls:Class = domain.getDefinition("b3u2p2_1a") as Class;
 57             _Skin = new cls() as MovieClip;
 58             _Skin.x = 140;
 59             _Skin.y = 0;
 60             _Skin.addEventListener(Event.ENTER_FRAME,onFrame);
 61
 62             _Skin.addFrameScript(100,function():void
 63             {
 64                 // 第一种调用图层写法
 65                 var myChildMc_0 : MovieClip = _Skin.getChildByName("myChildMc_0") as MovieClip;
 66                 //    添加点击事件
 67                 myChildMc_0.addEventListener(MouseEvent.CLICK,onClick);
 68                 myChildMc_0.buttonMode = true;
 69
 70                 // 第二种调用图层写法
 71                 var myChildMc_1 : MovieClip = _Skin["myChildMc_1"] as MovieClip;
 72                 myChildMc_1.addEventListener(MouseEvent.CLICK,onClick);
 73                 myChildMc_1.buttonMode = true;
 74                 _Skin.stop();
 75             })
 76
 77             addChild(_Skin);
 78
 79         }
 80
 81
 82         /**
 83          *     点击播放动画,并播放配音
 84          * @param e
 85          *
 86          */
 87         public function onClick(e:MouseEvent):void
 88         {
 89             var myclickMc:MovieClip  = e.currentTarget as MovieClip;
 90             var soundnum:int = myclickMc.name.split(‘_‘)[1];
 91             _audio.init(soundnum);
 92             myclickMc.gotoAndPlay(2);
 93         }
 94
 95
 96         /**
 97          *开场动画时,指定帧播放对应配音
 98          * @param e
 99          *
100          */
101         public function onFrame(e:Event):void
102         {
103             if(_xmlList.FrameDict[count])
104             {
105                 _audio.init(_xmlList.FrameDict[count]);
106             }
107             count++;
108         }
109
110     }
111 }  

配音控制类,VoicePlay:

 1 package
 2 {
 3     import flash.display.Sprite;
 4     import flash.media.Sound;
 5     import flash.net.URLRequest;
 6
 7
 8     /**
 9      *    声音控制类
10      * @ add hunter
11      *
12      */
13     public class VoicePlay extends Sprite
14     {
15         public var arr:Array = [‘audio/are you ok.mp3‘,‘audio/Yes, I am. I’m amazed.mp3‘];
16         public function VoicePlay()
17         {
18         }
19
20         public function init(count:int):void
21         {
22             var snd:Sound = new Sound(new URLRequest(arr[count]));
23             snd.play();
24         }
25
26     }
27 }

过场动画配音播放帧类,XmlProject:

 1 package
 2 {
 3     import flash.display.Sprite;
 4     import flash.events.Event;
 5     import flash.net.URLLoader;
 6     import flash.net.URLRequest;
 7     import flash.utils.Dictionary;
 8
 9
10     /**
11      * 播放序列帧对应的配音
12      * @author
13      *
14      */
15     public class XmlProject extends Sprite
16     {
17         public var FrameDict:Dictionary = new Dictionary();
18         public function XmlProject()
19         {
20             var xmlLoad:URLLoader = new URLLoader(new URLRequest("PlayList.xml"));
21             xmlLoad.addEventListener(Event.COMPLETE,XMLloaded);
22         }
23
24         // 在Dictionary存储数据,播放配音对应帧数,以及帧对应的配音编号
25         public function XMLloaded(e:Event):void
26         {
27             var myxml:XML = new XML(e.currentTarget.data);
28             trace(myxml);
29             for(var i:int=0;i<myxml.frame.length();i++)
30             {
31                 trace("@n = " + myxml.frame[i][email protected] + ", event = " + myxml.frame[i][email protected]);
32                 FrameDict[int(myxml.frame[i][email protected])]=myxml.frame[i][email protected];
33             }
34
35         }
36
37     }
38 }

过场动画配音xml表,PlayList:

1 <play>
2     <frame n="43" event="0"></frame>
3     <frame n="86" event="1"></frame>
4 </play>
时间: 2024-11-05 22:33:16

AS3获取SWF文件中AS链接的相关文章

Spring 获取propertise文件中的值

Spring 获取propertise文件中的值 Spring 获取propertise的方式,除了之前的博文提到的使用@value的注解注入之外,还可以通过编码的方式获取,这里主要说的是要使用EmbeddedValueResolverAware接口的使用. 一.准备propertise文件 在资源文件夹下面建立好要测试需要的app.propertise文件,里面写几条测试数据,本文主要如图数据. 二.准备配置文件 <?xml version="1.0" encoding=&qu

通过反射获取class文件中的构造方法,运行构造方法

/* * 通过反射获取class文件中的构造方法,运行构造方法 * 运行构造方法,创建对象 * 1.获取class文件对象 * 2.从class文件对象中,获取需要的成员 * * Constructor 描述构造方法对象类 */ 1.person类,用于测试获取无参的构造方法 package cn.itcast.demo1; public class Person { public String name; private int age; /*static{ System.out.printl

springboot入门_获取属性文件中的值

在上一篇文章中,记录了用springboot实现输出一个hello world到前台的程序,本文记录学习springboot读取属性文件中配置信息. 框架属性文件(application.properties) 创建一个springboot项目,并引入相关依赖,POM文件如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.or

spring 通过@Value 获取properties文件中设置了属性 ,与@Value # 和$的区别

spring 获取 properties的值方法 在spring.xml中配置 很奇怪的是,在context-param 加载的spring.xml 不能使用 ${xxx} 必须交给DispatcherServlet 管理的 springMVC.xml才能用? 要交给springMVC的DispatcherServlet去扫描,而不是spring的监听器ContextLoaderListener去扫描,就可以比较方便的使用"${xxx}"去注入. 1.使用 $ 获取属性 @Value(

Spring获取properties文件中的属性

1.前言 本文主要是对这两篇blog的整理,感谢作者的分享 Spring使用程序方式读取properties文件 Spring通过@Value注解注入属性的几种方式 2.配置文件 application.properties socket.time.out=1000 3.使用spring代码直接载入配置文件,获取属性信息 代码如下: Resource resource = new ClassPathResource("/application.properties"); Propert

php 获取一个文件中return array() 的值

<?php return array( 'name' => 'andy', 'sex' => 'male' ); ?> <?php $set = include("test.php"); print_r($set);exit; ?>

通过Jquery中Ajax获取json文件数据

1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : 名称/值对. 例如: "Student":"Tom" Json值可以是: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true或者false) 数组(在方括号中) 对象(在花括号中) null  例如(对象):{"name":"to

如何防止SWF文件被反编译

这篇文章的标题所提出的问题的答案是“不可能”.至少对我来说是不可能的.借助适当的工具,我们可以反编译任何SWF文件.所以,不要将重要的信息置于SWF文件中.SWF文件中不要包含个人的帐号或者密码. 我将简要的论述“保护”技术的历史,和他们是如何失败的,接着我将说明我们能尽的最大努力.中国古语有云,“规则只能防君子,不能仿小人”. 公开的文件格式 在讨论之前,我们先要知道,SWF的文件格式是公开的.公开的文件格式,意味着SWF文件并不是只能由Flash生成.其他公司也能制作可以在SWF播放器上播放

获取ini文件所有的Sections和Keys

获取ini文件中所有的Sections和Keys,并以pair对的方式存入到vector中 1 #include <iostream> 2 #include <windows.h> 3 #include <string> 4 #include <vector> 5 using namespace std; 6 7 #define PATH "E:\\vc_code\\parse_ini\\cfg.ini" 8 int main() 9 {