Hello, in my game, player doesn’t start to move constantly. For example:
X coordinates:
100 (position before movement)
104 (start to move)
160 ???
164
168
etc…
Why it suddenly jump from 104 to 160? Here is my code:
private void addListeners(){
setFocusable(true);
addKeyListener(new KeyListener(){
@Override
public void keyPressed(KeyEvent e) {
pressed.add(e.getKeyChar());
System.out.println("KEY");
if(isKeyDown == false){
for(Character c : pressed){
//System.out.print("X : "+player.getX());
//System.out.println(" Y : "+player.getY());
if(c == 'w' && player.getY()+-1*SPEED > 10){
speedY = -1*SPEED;
}if(c == 's' && player.getY()+SPEED < 640){
speedY = SPEED;
}if(c == 'a' && player.getX()+-1*SPEED > 10){
speedX = -1*SPEED;
}if(c == 'd' && player.getX()+SPEED < 1190){
speedX = SPEED;
}
isKeyDown = true;
}
}
}
@Override
public void keyReleased(KeyEvent e) {
pressed.remove(e.getKeyChar());
int key = e.getKeyCode();
if(key == KeyEvent.VK_W || key == KeyEvent.VK_S){
speedY = 0;
}
if(key == KeyEvent.VK_A || key == KeyEvent.VK_D){
speedX = 0;
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
});
}
private void update(){
System.out.println("UPDATE");
player.setX(player.getX()+speedX);
player.setY(player.getY()+speedY);
}
//Timer 20ms
@Override
public void actionPerformed(ActionEvent arg0) {
update();
repaint();
isKeyDown = false;
}
Actually, in player movement, I don’t see that jump. But coordinates jump at the beginning and that makes it impossible to make good collision detection. What’s wrong here?