MovieClip 报错

让你们查个错真难
4.png
已邀请:

Laya_Aaron

赞同来自:

Moviclip(简称MC)的实现机制大概是这样的:
每次创建一个MC实例,然后调用MC的load方法会去加载MC设置路径关联的图集等文件信息,因为你的代码是放在帧循环里,当前帧创建了一个MC实例,然后调用load去加载新资源,在load方法里有一个操作就是每次load资源之前,需要把之前MC使用过的资源先清理掉,然后在重新load新的资源,目前MC的加载播放机制是这样的。
 
关于你的MC报错,引擎也的确需要加个保护,判断下图集的信息是否存在,如果不存在就派发一个error事件通知开发者,MC使用的图集信息不存在,目前已安排引擎同事在版本里增加了保护,下个版本提交发布后就有了,临时你也可以通过修改代码来添加保护:
var data:*;
data=Loader.getRes(_url);
if (!data)
{
event(Event.ERROR,"file not find");
return;
}
//保护修改-----start------------------
var atlasData:Object = Loader.getAtlas(_atlasPath);
if(!atlasData)
{
event(Event.ERROR,"file not find");
return;
}
//保护修改-----end------------------
this.basePath =_atlasPath?Loader.getAtlas(_atlasPath).dir:_url.split(".swf")[0] + "/image/";
_initData(data);
添加了这个保护后,代码不会报错,但是你的帧循环使用创建MC不会显示,不显示的原因就是上面说的,下一个MC实例的load把上一次资源给清理掉了,播放调用不到资源,依次循环导致界面不会显示东西。
 
 
对于这块,load的实现机制引擎也确实有优化空间,但是,我们建议你选择animiation做序列帧动画,MC动画的性能很低,layaair引擎目前只支持MC的简单动画实现,同场景太多MC性能确实是个问题。animiation组件是性能很高的动画组件。

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作