您的位置:首页 > 其它

ActionScript 3.0 加载外部SWF素材资源MovieClip,SimpleButton不支持鼠标事件

2014-05-08 19:40 471 查看
我们用flash buidler加载素材一般有三种途径:

1、SWC,这种方式会增大SWF的大小

2、flash cs项目关联

3、SWF专门放素材资源通过Loader方式加载

今天发现通过SWF加载方式有个问题要加载的素材如下图:

  


A:是一个MC,里面放了一个B:mc,C:SimpleButton

问题:加载进A后对A添加鼠标事件如CLICK事件,单击B或C时没有反映?

开始我的加载方式是这样的:

目录结构如图:



代码如下:

package
{
import flash.display.DisplayObjectContainer;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;

[SWF(width = '1024',height = '768')]
public class TestExam extends Sprite
{
private var cache:Object = {};
private var mcName:String = "StartBar";
public function TestExam()
{

init();
}

private function init():void{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComp);
loader.load(new URLRequest('../libs/Material.swf'));//注意这个路径
}

private function onComp(e:Event):void{
trace(e.currentTarget,e.target);
var loaderInfo:LoaderInfo = e.currentTarget as LoaderInfo;
var appDomain:ApplicationDomain = loaderInfo.applicationDomain;
cache[mcName] = appDomain.getDefinition(mcName) as Class;

var clz:Class = getDef(mcName);
addMovie( new clz() as MovieClip );
}

private function getDef(name:String):Class
{
if( cache[name] )
{
return cache[name] as Class;
}
return null;
}

private function addMovie(mc:MovieClip):void
{
addChild(mc);
}

private function onRightClick(evt:MouseEvent):void{
trace(evt.target,evt.currentTarget);
}
}
}


但是就出现了我的问题。

解决方式:修改路径



上方代码路径改为

loader.load(new URLRequest('Material.swf'));
就可以了。
虽然解决了现在的问题但是还是没弄明白为什么,都能把素材加到舞台就是路径不一样而已却影响了鼠标事件。望大牛指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: