Input/Output Auf Tasteneingabe warten

Dasha

Mitglied
Hi,

ich bastle gerade an einen Spiel. Da man es mit der Tastatur steuert muss man natürlich permanent abfragen ob was gedrückt wurde.

Meine Idee war jetzt, einen zweiten Thread dafür zu machen.
Einer ist für die Bewegung der Objekte zuständig und der andere fragt die Tastatureingaben ab.
Kann man es damit machen oder gibt es da auch bessere Möglichkeiten?

Trotz Mehrkernprozessoren (die fast jeder PC hat) sollte der Thread zwischendrin auch mal kurz schlafen um nicht die ganze Zeit Ressourchen zu verbraten? Welchen Wert sollte ich da auswählen?

mfg
 
Üblicherweise hat man einen Thread für in dem die Gameloop läuft. Die Tastatureingaben werden nicht aktiv abgefragt sondern über bspw. KeyListener verarbeitet. In dem KeyListener wird man dann eine Variable setzen die die Gameloop abfragen und reagieren kann.
 
Ich bin auch gerade dabei ein Spiel zu programmieren. Bei mir ist die Steuerung schon fertig. Ich weis nicht ob dir dies etwas bringt aber ich stell sie dir einfach mal rein.

Java:
public void steuerung() {
       addKeyListener( new KeyAdapter(){
           @Override
           public void keyPressed (KeyEvent e) {
               if (e.getKeyChar() == 'w') {
                   car1.yCar = car1.yCar - 10;
                   repaint();
               }
               if (e.getKeyChar() == 's') {
                   car1.yCar = car1.yCar + 10;
                   repaint();
               }
               if (e.getKeyChar() == 'a') {
                   car1.xCar = car1.xCar - 10;
                   repaint();
               }
               if (e.getKeyChar() == 'd') {
                   car1.xCar = car1.xCar + 10;
                   repaint();
               }
           }
           
       });
       
    }
 
Das Beispiel von Dorfi ist ok, aber am besten setzt du per KeyListener nur boolean Werte auf "true" oder "false".

z.B.
Java:
if(w = pressed)
{
   moveup = true;
}

in deinem Gameloop gibt es dann die Methode "move()". Welche einfach die X/Y Werte erhöht/verringert, solange ein Wert auf "true" sitzt.

Java:
if(moveup)
{
   player.x += 1;
}

Somit kannst du auch 2 oder mehr Tasten drücken und verarbeiten. Sprich, du kannst dich diagonal bewegen.
 

Neue Themen


Zurück
Oben