咱們用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'));就能夠了。雖然解決了如今的問題可是仍是沒弄明白爲何,都能把素材加到舞臺就是路徑不同而已卻影響了鼠標事件。望大牛指點。