aus irgendeinem Grund losgelassen hat, mein Spielerobjekt bewegt sich weiter, nachdem die Bewegungstaste losgelassen wurde. Die Geschwindigkeit bleibt bei der Spielergeschwindigkeit, bis die Taste losgelassen wird und wieder losgelassen wird. während ich auf die Konsolenausgabe von VelX und VelY schaue, sehe ich etwas, das jeden Frame nach einigen Sekunden von 8 auf 16 umschaltet. und gelegentlich nach dem Loslassen der Taste wird die Geschwindigkeit sowieso bei 8 oder -8 bleiben.Der Spieler bewegt sich oft weiter, nachdem er die Taste
//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();
}
hier ist meine Clamp-Methode, wie meine Tastatur oben (Calculations.clamp) verwendet Eingabemethode
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());
}
}
}
}
wo ist ID.player definiert? Ist es eine globale Variable/Singleton? –
ID ist eine Enumeration, mit der ich meine Zeichen identifiziere, um verschiedene Objekttypen zu unterscheiden. .player ist ein Element dieser Enumeration. Das einzige Objekt mit dem getID() "player" ist der Spieler. –
Mögliches Duplikat von [So verwenden Sie Key Bindings statt Key Listeners] (https://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listeners) – user1803551