我如何在两个数字之间来回收敛?

时间:2011-08-04 01:06:33

标签: algorithm animation

我正试图让一个跑步的人动起来:

第1至第5帧=男子倾向于奔跑。 框架6到15 =人跑一步

frame = 1           
frame +=1         //frames progress forwards at rate of 1 frame 

function run(){
   if(frame>15){     //at frame 15: man has completed leaning into run and completed one 'running' cycle
       frame -=2      //frames now start to go backwards at rate of (1-2=)-1 frame
       if(frame<6){   //until they reach frame 6 (beginning of running animation)
           frame +=2  //frames start to progress forwards again at rate of (2-2+1=)+1 frame again

我的方法非常糟糕,似乎只能在15到6之间前进然后向后。

有谁知道如何无限期地在这两个数字之间反弹?

2 个答案:

答案 0 :(得分:6)

在达到frame = 15并开始向下行程之后,你会遇到一个条件(14),你的IF语句都不是真的。所以你的框架既不增加也不减少。卡住。

一个可能更好的解决方案是维护一个名为myDirection的变量,该变量在1和-1之间定期切换。也就是说,当你点击15时设置myDirection = -1,当你点击6时设置myDirection = 1.然后,你的迭代语句总是可以说frame = frame + myDirection并且它总会做某事 - 你永远不会无所事事。

答案 1 :(得分:2)

好的,所以使用LesterDove的+ schnaader我管理的有用提示:

int step=1

function run(){
    frame += step
    if(frame>15){ step = -1}
    if(frame<6){ step = 1}
}

它很有用。再次感谢!