今天游戏发布上线之后,总是随机的出现卡死。
换了个safari之后,看到抛了 IOErrorEvent。
问题是,我所有的Loader都加入了contentLoaderInfo监听。而抛出来的又没有堆栈。
搞了半天之后,我决定所有删除Loader的地方,都加入一个全局的IOErrorEvent看看到底是什么会是。最终看到如下的日志:
ArgumentError: Error #1063: com.xtar.loader.utils::DisplayObjectLoader$/globalIOErrorHandler() 的参数数量不匹配。应该有 0 个,当前为 1 个。
at flash.display::Loader/_unload()
at flash.display::Loader/unloadAndStop()
at _428_fla::MainTimeline/frame57()
at flash.display::MovieClip/gotoAndStop()
at com.xtar.loader.utils::XMovieClipInfoManager$/allGotoAndStop()
at com.xtar.loader.utils::XMovieClipInfoManager$/cacheBitmapMovie()
at com.xtar.loader.core::XMovieclipLoaderItem/privateLoaderComplete()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.xtar.loader.utils::DisplayObjectLoader/loadComplete()
at com.xtar.loader.utils::DisplayObjectLoader/loadByMovieclip()
at com.xtar.loader.utils::DisplayObjectLoader/loadByObject()
at com.xtar.loader.utils::DisplayObjectLoader/loadByLoader()
at MethodInfo-2473()
我不小心在IOErrorHandler参数写错了。但是正好,就这样把我的堆栈打出来了。原来:
我的swf里面,播放到最后一帧的时候,会自动removeChild(this)。然后flash本身机制就会自动调用unloadAndStop。
然后loader就会自动抛出IOErrorEvent.
靠。这个明显是flash设计的不人性化