2013-05-29 2 views
0

У меня возникают проблемы с остановкой персонажа, когда он попадает в края окон. Вот мой метод обновления.Символьное столкновение при попадании краев окна

public void update(GameContainer gc, StateBasedGame sbg, int delta) 
    { 
     Input input = gc.getInput(); 
     playerX += VelocityX; 

     gc.setShowFPS(Splash.showFps); 

     if(input.isKeyPressed(Input.KEY_F1)) 
     { 
      Splash.showFps = !Splash.showFps; 
     } 

     if (input.isKeyDown(Input.KEY_RIGHT)) 
      VelocityX = 10; 
     else if (input.isKeyDown(Input.KEY_LEFT)) 
      VelocityX = -10; 
     else if (playerX >= 700) 
      VelocityX = 0; 
     else 
     { 
      VelocityX = 0; 
     } 

    } 

Я понимаю, что уходящий в левый происходит потому, что я не закодировал, но пока символ гаснет экран права

ответ

1
if (input.isKeyDown(Input.KEY_RIGHT)){ 
     VelocityX = 10;} 
    else if (input.isKeyDown(Input.KEY_LEFT)){ 
     VelocityX = -10;} 
    else{VelocityX = 0;} 
    if (playerX >699){ 
     playerX=699; 
     VelocityX = 0;} 
    else if(playerX<1){ 
     playerX=1;VelocityX = 0; 
     } 
+0

Я пробовал что-то похожее на это раньше, и это сработало, но затем персонаж не мог двигаться вообще, останавливаясь на краю. – freemann098

+0

@ freemann098 отредактировал – Nikki

0

Проблема исправлена. В ключе обнаружения вы установите скорость в 0.

Таким образом, вместо

if (input.isKeyDown(Input.KEY_RIGHT)) 
      VelocityX = 10; 
     else if (playerX >= 700) 
      VelocityX = 0; 

ли что-то вроде

if (input.isKeyDown(Input.KEY_RIGHT)) 
     { 
      VelocityX = 10; 
      if (playerX >= 700) 
       VelocityX = 0; 
     } 
0

Есть несколько вещей, которые я заметил неправильно. Во-первых, это проблема с обновлением: вы хотите, чтобы игрок двигался по скорости. Вам также необходимо выполнить проверку границ. Другая проблема, с которой вы не сталкивались, заключается в том, что у вас есть правильное ключевое предпочтение. Это означает, что если вы держите правый и левый ключ, игрок движется вправо. Это связано с операторами if/else if. Вы должны отделить сослагательное наклонение за более детальный уровень управления:

public void update(GameContainer gc, StateBasedGame sbg, int delta) 
{ 
    Input input = gc.getInput(); 
    //playerX += VelocityX; -> this is moved 

    gc.setShowFPS(Splash.showFps); 

    if(input.isKeyPressed(Input.KEY_F1)) 
    { 
     Splash.showFps = !Splash.showFps; 
    } 

    VelocityX = 0; 
    if (input.isKeyDown(Input.KEY_RIGHT)) 
     VelocityX += 10; 
    //removed the else 
    if (input.isKeyDown(Input.KEY_LEFT)) 
     VelocityX -= 10; 

    //you want to bounds check regardless of the above statments 
    //get rid of the else 
    if ((playerX >= 700 && VelocityX > 0) || (playerX <= 0 && VelocityX < 0)) //check both sides 
     VelocityX = 0; 

    //move the player 
    playerX += VelocityX; 
} 

EDIT: Модифицированный мой код, чтобы исправить проблему, чтобы быть не в состоянии двигаться, когда на границе.

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