我在AS文件脚本里面运行了这个代码:
mole_mc.gotoAndPlay("left_right");
trace("----left_right");
然后在mole_mc 里面的 "left_right" 标签(lable)里的头三帧加入下面代码:
trace("left to right11"); //第一帧代码
trace("left to right22"); //第二帧代码
trace("left to right33"); //第三帧代码
mole_mc.gotoAndPlay("right_left");
trace("----right_left");
在mole_mc 里面的 "right_left" 标签(lable)里的头三帧加入下面代码:
trace("right to left11"); //第一帧代码
trace("right to left22"); //第二帧代码
trace("right to left33"); //第三帧代码
在mole_mc.gotoAndPlay("left_right")运行之前,mole_mc 是一直在运动的,它会在时间轴上的某个标签(walk)里一直循环(gotoAndPlay("walk"))
运行的时候,output代码:
/******************************************************/
----right_left
right to left11
right to left22
right to left33
-------------changeObjDir----43mole_mc0
----left_right
left to right11
left to right22
left to right33
-------------changeObjDir----43mole_mc0
----left_right
left to right11
-------------changeObjDir----14mole_mc0
/******************************************************/
大部分情况下头三帧都可以运行得到:
right to left11
right to left22
right to left33
这个是正常的结果。
但是偶尔会出现以下异常:
left to right11
只运行了一帧后面就不运行了,在这过程中没有其他的代码让它跳转。
mole_mc始终保持gotoAndPlay之前的状态不变(walk)。
对于刚接触不久flash的我,真不知道坐何下手去找问题,从去年开始就有了,
到今年3月份才解决,中间跨了一个年度。
我把问题最小化,尽量缩小代码范围,把代码全部写在fla文件里,
这样做之后我们leader测试的时候发现一个规律,出现问题跟位置有关系,
就是老鼠在某一个洞里钻出来,就一定会出现问题,这是一个很好的线索,
可当天还是没找到问题的所在(当时已经快到晚上11点了,晚饭还没吃),
主要是还是没有任何思路,代码已经缩小到最小了,一共不到十行。
第二天我们的leader给把代码给了安看,中午快要吃饭的时候就找到问题的所在了,高手就是高手。
从宏观来讲这样做是根本没问题的,但flash很多时候做一件事时会延时,比如用delete,
它不会马上把内存给删了,可能要过一会儿才会删。
而这里也是类似的道理,当快要调用代码:mole_mc.gotoAndPlay("walk")时,
这个代码 mole_mc.gotoAndPlay("right_left");被调用了,可能还没马上运行,
或者已经把一帧的代码放入内存,walk的代码来了: mole_mc.gotoAndPlay("walk"),
所以就会出现mole_mc.gotoAndPlay("right_left");代码运行了一帧就不运行了。