咱们用flash buidler加载素材通常有三种途径:app
一、SWC,这种方式会增大SWF的大小ui
二、flash cs项目关联spa
三、SWF专门放素材资源经过Loader方式加载.net
今天发现经过SWF加载方式有个问题要加载的素材以下图:code
A:是一个MC,里面放了一个B:mc,C:SimpleButtonblog
问题:加载进A后对A添加鼠标事件如CLICK事件,单击B或C时没有反映?事件
开始个人加载方式是这样的:ip
目录结构如图:资源
代码以下:get
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'));就能够了。虽然解决了如今的问题可是仍是没弄明白为何,都能把素材加到舞台就是路径不同而已却影响了鼠标事件。望大牛指点。