当以时长为出发点考察时,确定各运动阶段比较容易,只要比较当前计时器次数和个阶段分配时长的关系即可。而围绕速度考虑这个问题时,就必须引入一个新的变量:已过行程(past)。已过行程(past)描述的是对象已经走过路程的总和。通过比较已过行程和各个阶段的路程距离,就能区分甄别不同的运动阶段了。
//ary_dist数组各项依次表示:三点距离总长,AB距离,BC距离,CA距离
if(past<=ary_dist[1]){
//处理运动第一阶段:A点到B点
}
else if(past>ary_dist[1] && past<= (ary_dist[2]+ary_dist[1]))
{
//处理运动第一阶段:B点到C点
}
else if(past> (ary_dist[2]+ary_dist[1]) && past<=ary_dist[0])
{
//处理运动第一阶段:C点到A点
}
注意:围绕时长编程时,当前计数器在重设定时器时被自动清零了。所以当定时器重启后,动画能正常重新开始。而在围绕速度编程的时候,判断的依据是已过行程(past)。必须在定时器重启时手工清零已过行程(past),保证动画可以重复运行。具体做法就是在计时器timerComplete事件的响应函数里,增加一行修正语句:
function animComplete(event:TimerEvent):void {
event.target.reset();
past=0;//手工清零
event.target.start();
}
这样,当运动对象走完全部路程后,又能回到起始点,并继续新的动画。