Kann nur nach rechts drehen

Mr. Moon

Mitglied
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:

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:

eMmiE

Bekanntes Mitglied
Such mal Codestellen, in denen du abfragst, ob die Spielfigur gerade schießt oder nicht, die auch im Zusammenhang mit der Drehung stehen

Das hier sollte eigentlich funktionieren, nach deiner Beschreibung

Gruß eMmiE
 

Mr. Moon

Mitglied
Also ich hab jetzt mal sowohl die Key Abfrage der Leertaste in Controls als auch alle Sachen die mit dem Feuern zusammenhängen auskommentiert. Das Problem bleibt bestehen. Wenn ich die Leertaste gedrückt halte, kann ich die Spielfigur nicht linksherum drehen :/
 

eMmiE

Bekanntes Mitglied
Wird das Event nicht erkannt, wenn die Leertaste gedrückt wurde oder wird linksrum nur nicht ausgeführt
Es kann mit dem gleichzeitigen drücken von Tasten zusammenhängen, dass einzelne nicht mehr erkannt werden

Tipp:
Wenn du erkannt hast, um welche Taste es sich handelt kannst du die Methode auch einfach mit einem "return;" beenden

Gruß eMmiE
 

eMmiE

Bekanntes Mitglied
Ich mache das immer so, dass ich ein boolean Array habe mit einer boolean für jede (benötigte) Taste und bei jedem Tastendruck abfrage, ob der KeyCode dem der zugehörigen boolean entspricht

Mit den VK_... Methoden habe ich bis jetzt noch gar nicht gearbeitet
Kannst ja einfach mal probieren, das so zu machen, aber ich kann nichts garantieren :)

Gruß eMmiE
 

Eichelhäer

Bekanntes Mitglied
Hallo,

versuch kein einfaches if beim Listener und bei der update zu verwenden sondern ein else if dann sollte es gehen.

Gruß Eichelhäer
 

eMmiE

Bekanntes Mitglied
Wenn das dein ganzer Code ist, dann fehlt eine Zeile im Konstruktor, nämlich da, wo du den KeyListener einbindest

this.addKeyListener(this);

hört sich erstmal megasinnvoll an, weil man ja quasi der Klasse sich selbst zufügt, aber das geht einfach darum, dass die Klasse den KeyListener schließlich nutzen kann
Hoffe, dass das das Problem war :)

Gruß eMmiE
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Minecraft Plugins nach Buchanleitung funktionieren nicht Spiele- und Multimedia-Programmierung 4
LeleEdits Discord JDA nach Rolle suchen Spiele- und Multimedia-Programmierung 0
I Wie kann ich die Kreise nach jeweils 1s spawnen lassen? Processing Spiele- und Multimedia-Programmierung 1
dummycoders Android Studio - Button ändert Farbe erst nach Delay? Spiele- und Multimedia-Programmierung 5
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
Blender3D VLCJ Video lässt sich nicht mehr abspielen nach mysql Installation Spiele- und Multimedia-Programmierung 1
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
A AffineTransform: Nach Drehen verschieben Spiele- und Multimedia-Programmierung 2
N JPanel Inhalt aktualisiert nach Thread.sleep nicht Spiele- und Multimedia-Programmierung 2
T MiniCraft - selbst nach Programmieren Spiele- und Multimedia-Programmierung 25
F Screenshot Programm nach Exception weiterlaufen lassen? Spiele- und Multimedia-Programmierung 9
D Java Variable nach String benennen Spiele- und Multimedia-Programmierung 13
A Minecraft SocketException nach Minecraft-Update Spiele- und Multimedia-Programmierung 6
M DataLine not supported nach 20 Minuten Spiele- und Multimedia-Programmierung 6
M Beim schießen richtet sich die Kugel nach der Maus aus (Quaternion) Spiele- und Multimedia-Programmierung 5
E Spiel startet nach exportieren nicht Spiele- und Multimedia-Programmierung 7
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
aze "verstümmelte Flächen" nach TransparenzInterpolation Spiele- und Multimedia-Programmierung 9
W JOGL bleibt nach display() in PaintArea.paintComponent hängen Spiele- und Multimedia-Programmierung 5
F Lichtspektrum dezimal nach RGB Spiele- und Multimedia-Programmierung 10
R Koordinaten, Breite, Höhe nach drehen berechnen? Spiele- und Multimedia-Programmierung 3
Apo ApoStarz - Bring die Sterne nach Hause Spiele- und Multimedia-Programmierung 19
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
D Zwei Fragen (Exponential Fog und Schein-nach-außen-Effekt) Spiele- und Multimedia-Programmierung 6
S Polygon bewegt sich nach mehreren aufrufen immer schneller Spiele- und Multimedia-Programmierung 3
M durchsichtiges Bild nach clearRect Spiele- und Multimedia-Programmierung 8
S drawString Befehl nicht ausgeführt nach transforming Spiele- und Multimedia-Programmierung 5
F Das SPiel ruckelt nach einer Zeit Spiele- und Multimedia-Programmierung 19
S Info+Taste nach oben. Spiele- und Multimedia-Programmierung 2
S Punkt berechnen, nach Rotation Spiele- und Multimedia-Programmierung 2
R Falsche Positionierung der Interpolatoren nach Verwendung Spiele- und Multimedia-Programmierung 3
B Character Bild links/rechts Spiele- und Multimedia-Programmierung 19
G Slick2D SpriteSheet drehen in kuckrichtung Spiele- und Multimedia-Programmierung 1
Androbin mehr-dimensionale(n) Array(s) "drehen" Spiele- und Multimedia-Programmierung 8
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
Creylon [LWJGL] 2D Sprite Rotieren/Drehen Spiele- und Multimedia-Programmierung 6
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
R Drehen eines Bildes relativ zur Mauszeigerposition Spiele- und Multimedia-Programmierung 2
A Drehen von einem Image Spiele- und Multimedia-Programmierung 4
CookieSoft 3D Würfel will sich nicht drehen! [LWJGL] Spiele- und Multimedia-Programmierung 2
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
F 2D Shooter (von oben) Kugelberechnung und drehen der Figur Spiele- und Multimedia-Programmierung 17
M 2D - Bild um y-Achse drehen Spiele- und Multimedia-Programmierung 9
S Drehen nur um x-Achse Spiele- und Multimedia-Programmierung 5
T [java3d] Figur drehen Spiele- und Multimedia-Programmierung 16
B vertikal schreiben oder eine Bilddatei drehen? Spiele- und Multimedia-Programmierung 11
A "Textur-Achse" drehen. Spiele- und Multimedia-Programmierung 2
M um eigene Achse drehen Spiele- und Multimedia-Programmierung 3
B Bounds drehen sich nicht mit.... Spiele- und Multimedia-Programmierung 7
P Rechteck drehen Spiele- und Multimedia-Programmierung 3
P 2D Bild drehen Spiele- und Multimedia-Programmierung 4
N Rundenstrategiespiel - Problem beim Drehen eines Bildes Spiele- und Multimedia-Programmierung 18
Z Obejkt drehen & vorwärts bewegen Spiele- und Multimedia-Programmierung 9
K Bilder drehen Spiele- und Multimedia-Programmierung 5
R Bild drehen Spiele- und Multimedia-Programmierung 24
X Bild auf aktueller position drehen Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen


Oben