Hallo,
Ich habe für mein Spielprojekt einen KeyListener implementiert, der eigentlich auch funktioniert. Die Steuerung sieht so aus, dass wenn ich die linke oder rechte Pfeiltaste drücke, ich mich nach links oder rechts drehe und wenn ich die obere Pfeiltaste drücke, ich laufe. Das funktioniert auch einwandfrei, aber wenn ich zusätzlich noch die Leertaste drücke(zum Feuern), dann kann ich mich auf einmal nur noch rechtsherum drehen. Ich kann mir nicht erklären woran es liegt. Hier mein Code:
Vielen Dank für jede Hilfe.
Ich habe für mein Spielprojekt einen KeyListener implementiert, der eigentlich auch funktioniert. Die Steuerung sieht so aus, dass wenn ich die linke oder rechte Pfeiltaste drücke, ich mich nach links oder rechts drehe und wenn ich die obere Pfeiltaste drücke, ich laufe. Das funktioniert auch einwandfrei, aber wenn ich zusätzlich noch die Leertaste drücke(zum Feuern), dann kann ich mich auf einmal nur noch rechtsherum drehen. Ich kann mir nicht erklären woran es liegt. Hier mein Code:
Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Controls implements KeyListener {
private Hero hero;
public Controls(Hero hero) {
this.hero = hero;
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode() == KeyEvent.VK_SPACE) {
hero.setFire(true);
}
if(e.getKeyCode() == KeyEvent.VK_UP) {
hero.setUp(true);
}
if(e.getKeyCode() == KeyEvent.VK_DOWN) {
hero.setDown(true);
}
if(e.getKeyCode() == KeyEvent.VK_LEFT) {
hero.setLeft(true);
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
hero.setRight(true);
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode() == KeyEvent.VK_SPACE) {
hero.setFire(false);
}
if(e.getKeyCode() == KeyEvent.VK_UP) {
hero.setUp(false);
}
if(e.getKeyCode() == KeyEvent.VK_DOWN) {
hero.setDown(false);
}
if(e.getKeyCode() == KeyEvent.VK_LEFT) {
hero.setLeft(false);
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
hero.setRight(false);
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
Java:
public class Hero extends Sprite {
private boolean up;
private boolean down;
private boolean left;
private boolean right;
private boolean fire;
private GameField gf;
private Tile[][] tilemap;
.....
public void checkKeys(long delta) {
if(!left && right) {
rotate(delta, true, 2);
}
if(left && !right) {
rotate(delta, false, 2);
}
if(up && !down) {
gf.scrollMap(delta, 100000, direction);
}
if(!up && down) {
gf.scrollMap(delta, -100000, direction);
}
if(!up && !down) {
dx = 0;
dy = 0;
}
}
@Override
public void doLogic(long delta) {
// TODO Auto-generated method stub
super.doLogic(delta);
checkKeys(delta);
limitMap();
}
}
Java:
public abstract class Sprite extends Rectangle2D.Double implements Drawable, Movable {
protected double dx;
protected double dy;
....
protected void rotate(long delta, boolean rotRight, int skip) {
if(rotRight) {
direction = (direction + 1 + skip) % images.length;
}
else {
direction = direction - 1 - skip;
if(direction < 0) {
direction = images.length + direction;
}
}
}
Vielen Dank für jede Hilfe.
Zuletzt bearbeitet: