後,球員經常繼續移動,我的球員對象在移動鍵釋放後繼續移動。速度停留在玩家的移動速度上,直到鬆開按鍵並再次釋放。當看着velX和velY的控制檯輸出時,我會看到它在幾秒鐘的持續時間內將每幀從8幀切換到16幀。偶爾在釋放鑰匙後,速度將保持在8或-8。由於某些原因,釋放鍵
//Player tick method
public void tick() {
//Dissalow Exceess Velocity
velX = Calculations.clamp(velX, -getMaxSpeed(), getMaxSpeed());
velY = Calculations.clamp(velY, -getMaxSpeed(), getMaxSpeed());
//move the player
x += velX;
y += velY;
//dissalow exiting room
x = Calculations.clamp(x, 0, Game.WIDTH - 32);
y = Calculations.clamp(y, 0, Game.HEIGHT - 32);
//check for collisions with objects
collision();
}
這裏是上述(Calculations.clamp)作爲用於我的鉗位方法
//clamp
public static int clamp(int var, int min, int max)
{
if(var >= max)
return var = max;
else if(var <= min)
return var = min;
else return var;
}
最後我的鍵盤輸入方法
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class KeyInput extends KeyAdapter
{
private Handler myHandler;
public KeyInput(Handler handler)
{
this.myHandler = handler;
}
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
for(GameObject object : myHandler.objects)
{
if(object.getId() == ID.player)
{
if(key == KeyEvent.VK_W) object.setVelY(object.getVelY() - object.getMaxSpeed());
if(key == KeyEvent.VK_S) object.setVelY(object.getVelY() + object.getMaxSpeed());
if(key == KeyEvent.VK_A) object.setVelX(object.getVelX() - object.getMaxSpeed());
if(key == KeyEvent.VK_D) object.setVelX(object.getVelX() + object.getMaxSpeed());
}
}
}
public void keyReleased(KeyEvent e)
{
int key = e.getKeyCode();
for(GameObject object : myHandler.objects)
{
if(object.getId() == ID.player)
{
if(key == KeyEvent.VK_W) object.setVelY(object.getVelY() + object.getMaxSpeed());
if(key == KeyEvent.VK_S) object.setVelY(object.getVelY() - object.getMaxSpeed());
if(key == KeyEvent.VK_A) object.setVelX(object.getVelX() + object.getMaxSpeed());
if(key == KeyEvent.VK_D) object.setVelX(object.getVelX() - object.getMaxSpeed());
}
}
}
}
其中是ID.player定義的?它是一個全局變量/單身? –
ID是一個枚舉,我用它來識別我的角色以區分不同的對象類型。 .player是該枚舉的一個元素。具有getID()「player」的唯一對象是玩家。 –
可能重複的[如何使用密鑰綁定而不是密鑰監聽器](https://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listeners) – user1803551