flash AS2.0 关于跳帧问题

来源:互联网 发布:sql 多表别名的使用 编辑:程序博客网 时间:2024/05/15 18:07

我在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");代码运行了一帧就不运行了。