2011-08-04 3 views
1

Я пытаюсь анимировать человека, бегущего:Как сходиться между двумя цифрами?

Рамки от 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.

Кто-нибудь знает, как я могу отскочить между этими двумя числами на неопределенный срок?

ответ

6

После достижения кадра = 15 и начала поездки вниз, вы попадаете в условие (14), где ни одно из ваших утверждений IF истинно. Таким образом, ваш кадр не увеличивается и не уменьшается. Штука.

Возможным лучшим решением было бы поддерживать переменную, называемую myDirection, которая периодически переключается между 1 и -1. То есть, установите myDirection = -1, когда вы нажмете 15, и установите myDirection = 1, когда вы нажмете 6. Тогда ваше итеративное заявление всегда может сказать frame = frame + myDirection, и оно всегда будет что-то делать - вы никогда не зациклитесь, ничего не делая.

+0

ah whoops Я знал, что в моей логике было какое-то гигантское отверстие. – tetris11

2

Итак, используя полезные советы LesterDove в + schnaader, я удался:

int step=1 

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

и это работает отличные ребята. Еще раз спасибо!

+0

Молодцы. Обратите внимание, что вам не понадобится 'forward' boolean вообще, этого должно быть достаточно, чтобы просто изменить' step' внутри операторов 'if'. – schnaader

+1

А это упрощает вещи, как helluvalot. Спасибо, человек отредактирован – tetris11

Смежные вопросы