を解放した後に移動し続け、私の選手オブジェクトが移動キーが解放された後に移動し続けます。鍵盤を離すと再び離されるまで、ベロシティは変化しません。 velXとvelYのコンソール出力を見ながら、私は何か、それが押したままの数秒後に8から16までの各フレームをトグルを参照してください。キーを離した後でも、速度は8または-8にとどまることがあります。 (Calculations.clamp)上に使用されるように、ここでプレーヤーは、多くの場合、何らかの理由でキー
//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();
}
は私クランプ法で
//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は、私は別のオブジェクト型を区別するためにIDに自分の文字を使用列挙型です。 .playerはそのenumの要素です。 getID() "player"を持つ唯一のオブジェクトはプレーヤです。 –
[キーリスナーの代わりにキーバインディングを使用する方法](https://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listeners) – user1803551