Flash的异步机制,有时候异常DT,总出现意想不到的难题。总结几个问题如下。
1.跳帧时,元件实例异步加载延迟问题。例如某一帧放入了一个按钮元件后,使用实例名称去访问按钮时会出现对象不存在的错误。TypeError: Error #1009: 无法访问空对象引用的属性或方法。
原因:该帧的按钮对象还没有加载完毕,帧上的AS3.0代码就先执行了,导致访问的对象不存在。不知道Flash为什么会弄出这样的异步问题。
解决方案:一般出现问题时候是给按钮添加事件处理函数的时候,以此为例说明解决方案。原理上就是延迟300ms,等待帧上元件对象加载完毕再执行对按钮的访问操作。
setTimeout(addAction,300);
function addAction()
{
btnStart.addEventListener(MouseEvent.CLICK,onClickFunction);
}
2.gotoAndPlay在类内部无法使用的问题。可以通过回调函数来解决。
在第一帧上写函数gotoScene函数,实现gotoAndPlay功能。然后将函数以参数方式传给类,类内部就可以通过gotoScene函数来实现帧跳转了。
function gotoScene(frame:uint)
{
gotoAndPlay(frame);
}
3.舞台stage居中的问题。
设置stage.align时,没有可用的居中参数,但是传一个空字符串给它,就居中了。
stage.align="";//舞台将会在显示区域正中
stage.align=StageAlign.TOP_LEFT;//舞台将在显示区域左上角
4.读取xml文件时的同步问题。xml文件读取的处理过程一般是在Event.COMPLETE事件中添加处理函数来读取。例如urlLoader.addEventListener(Event.COMPLETE, OnCompleteLoad)。但是我们常常在想使用读取的数据时,发现OnCompleteLoad函数还未执行。因flash异步读取xml文件的机制,暂未发现有效解决方案。
规避方案:在帧上写读取函数,并将所有要访问文件的过程在处理OnCompleteLoad函数时才运行(即放在这个函数内)。