我们用flash buidler加载素材一般有三种途径:
1、SWC,这种方式会增大SWF的大小
2、flash cs项目关联
3、SWF专门放素材资源通过Loader方式加载
今天发现通过SWF加载方式有个问题要加载的素材如下图:
A:是一个MC,里面放了一个B:mc,C:SimpleButton
问题:加载进A后对A添加鼠标事件如CLICK事件,单击B或C时没有反映?
开始我的加载方式是这样的:
目录结构如图:
代码如下:
1 package
2 {
3 import flash.display.DisplayObjectContainer;
4 import flash.display.Loader;
5 import flash.display.LoaderInfo;
6 import flash.display.MovieClip;
7 import flash.display.Sprite;
8 import flash.events.Event;
9 import flash.events.MouseEvent;
10 import flash.net.URLRequest;
11 import flash.system.ApplicationDomain;
12
13 [SWF(width = ‘1024‘,height = ‘768‘)]
14 public class TestExam extends Sprite
15 {
16 private var cache:Object = {};
17 private var mcName:String = "StartBar";
18 public function TestExam()
19 {
20
21 init();
22 }
23
24 private function init():void{
25 var loader:Loader = new Loader();
26 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComp);
27 loader.load(new URLRequest(‘../libs/Material.swf‘));//注意这个路径
28 }
29
30 private function onComp(e:Event):void{
31 trace(e.currentTarget,e.target);
32 var loaderInfo:LoaderInfo = e.currentTarget as LoaderInfo;
33 var appDomain:ApplicationDomain = loaderInfo.applicationDomain;
34 cache[mcName] = appDomain.getDefinition(mcName) as Class;
35
36 var clz:Class = getDef(mcName);
37 addMovie( new clz() as MovieClip );
38 }
39
40 private function getDef(name:String):Class
41 {
42 if( cache[name] )
43 {
44 return cache[name] as Class;
45 }
46 return null;
47 }
48
49 private function addMovie(mc:MovieClip):void
50 {
51 addChild(mc);
52 }
53
54 private function onRightClick(evt:MouseEvent):void{
55 trace(evt.target,evt.currentTarget);
56 }
57 }
58 }
但是就出现了我的问题。
解决方式:修改路径
上方代码路径改为
loader.load(new URLRequest(‘Material.swf‘));
就可以了。
虽然解决了现在的问题但是还是没弄明白为什么,都能把素材加到舞台就是路径不一样而已却影响了鼠标事件。望大牛指点。
ActionScript 3.0
加载外部SWF素材资源MovieClip,SimpleButton不支持鼠标事件
时间: 2024-10-03 13:45:53