2016-03-18 2 views
2

Я пишу небольшую игру в java, и очевидный ключевой компонент способен перемещать символ с помощью клавиш со стрелками. Однако я не могу заставить все направления работать, и только последние два оператора if из следующего блока фактически активируются.Перемещение изображений с помощью клавиш со стрелками в Java

public void Update(){ 
    if(Canvas.keyboardKeyState(KeyEvent.VK_UP)) 
     yVel = -1; 
    else 
     yVel = 0; 

    if(Canvas.keyboardKeyState(KeyEvent.VK_LEFT)) 
     xVel = -1; 
    else 
     xVel = 0; 

    if(Canvas.keyboardKeyState(KeyEvent.VK_DOWN)) 
     yVel = 1; 
    else 
     yVel = 0; 

    if(Canvas.keyboardKeyState(KeyEvent.VK_RIGHT)) 
     xVel = 1; 
    else 
     xVel = 0; 

    x += xVel; 
    y += yVel; 
} 

Мои входы хорошие, все ключи регистрируются, но математика не имеет места. Если у кого-то есть предложения или библиотека/пакет, которые сделают это проще, сообщите мне.

+0

Удалить ваши 'else' блоки. Например, вы нажимаете UP, но не одновременно нажимаете DOWN. Итак, 'yVel' равен' -1' сначала, но тогда он равен '0'. –

ответ

1

Вы переопределяете значения в блоках else. Возможно, вы захотите это сделать.

public void Update(){ 

    xVel = 0; 
    yVel = 0; 

    if(Canvas.keyboardKeyState(KeyEvent.VK_UP)) { 
     yVel -= 1; 
    } 

    if(Canvas.keyboardKeyState(KeyEvent.VK_LEFT)) { 
     xVel -= 1; 
    } 

    if(Canvas.keyboardKeyState(KeyEvent.VK_DOWN)) { 
     yVel += 1; 
    } 

    if(Canvas.keyboardKeyState(KeyEvent.VK_RIGHT)) { 
     xVel += 1; 
    } 

    x += xVel; 
    y += yVel; 
} 
0

Его очень очевидно. Каждый раз, когда выполняется цикл, происходит следующее:

Если он выполняет первый оператор if, он также выполняет остальную часть else statements.

это должно быть что-то вроде этого:

xVal = 0; 
yVal = 0; 
if(keyDown){ 
    yVal++; 
} 
else if(keyUp){ 
    yVal--; 
} 
else if(keyLeft){ 
    xVal--; 
} 
else{ 
    xVal++; 
} 
//Your rest of the code. 
Смежные вопросы