Wie funktionieren events auf Tastendruck?

Status
Nicht offen für weitere Antworten.
Hallo zusammen!
Ich will erstmal allge ganz herzlich grüßen weils mein erster beitrag ist. =)

Ich hab auch gleich mal ein Problem. Und zwar stehe ich noch ziemlich am Anfang der java-programmierung und versuche grade das bekannte spielchen "snake" als applet zu programmieren.
Ich bin jetzt so weit dass ich ein kleines quadrat mit einem anderen quadrat als schwanz per buttonclick (ein button für hoch, ein button für rechts usw.) stück für stück in einem fest vorgegebenen spielfeld bewegen kann.

Ich will jetzt allerdings dass ich die "schlange" per pfeiltasten und nicht per butoonclicks steuern kann.
Ich hab aber keine Ahnung wie das geht.

Könnt ihr mir da helfen und vielleicht eine beispielklasse oder so zeigen?


thx
Darkwing
 
ja danke. das hab ich schon getan.
Aber ich weiß nicht wie s weitergeht. Also wie der syntax ist und wie die Pfeiltasten überhaupt definiert werden
 

Sky

Top Contributor
Also, Du kannst Du zunächst mal deinen eigenen KeyListener schreiben, z.B.:
Code:
class SnakeKeyListener
    implements KeyListener {

  public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_UP) {
      System.out.println("UP");
    }
    else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
      System.out.println("DOWN");
    }
    else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
      System.out.println("LEFT");
    }
    else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
      System.out.println("RIGHT");
    }

  }

  public void keyReleased(KeyEvent e) {

  }

  public void keyTyped(KeyEvent e) {

  }
}

Und diesen dann einfach deinem Applet zuweisen:

Code:
    SnakeKeyListener oSkl = new SnakeKeyListener();
    this.addKeyListener(oSkl);
 
Danke für den code. aber leider klappts trotzdem nicht. Er springt irgendwie nicht in meinen Keylistener rein... :(
Code:
public void keyPressed(KeyEvent e)
	{
		if (e.getKeyCode() == KeyEvent.VK_UP)
		{
			i_neuHoch = 1;
		}
		else if (e.getKeyCode() == KeyEvent.VK_DOWN)
		{
			i_neuRunter = 1;
		}
		else if (e.getKeyCode() == KeyEvent.VK_LEFT)
		{
			i_neuLinks = 1;
		}
		else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
		{
			i_neuRechts = 1;
		}
	}
ich hab den keylistener natürlich implementiert:
Code:
public class Game extends Applet implements ActionListener, KeyListener
und in der init aufgerufen
Code:
addKeyListener(this);

Den Konstruktor brauche ich ja nicht da ich einfach alles in eine Klasse geschrieben habe.

Ich weiß echt nicht weiter. Habt ihr noch ne Idee?
 

Bleiglanz

Gesperrter Benutzer
i_neuRechts = 1;

du änderst ja nur eine Variable, dann wird der Listener verlassen und auf dem Bildschirm tut sich natürlich NICHTS

=> du musst schon noch irgendeiene Aktion anstossen
 
Ja aber durch den Wert der Variable rufe ich eine andere Methode auf.

Ich hab hier mal ein kleines Programm geschrieben wie ich den Keylistener auch in meinem snake-spiel angewandt habe: (klappt ebenfalls nicht)

Code:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Taste extends Applet implements KeyListener
{
	boolean bool = false;

	public void init()
	{
		setBackground (Color.WHITE);
		setLayout (null);
	}
	
	public void paint(Graphics g)
	{
		if (bool == true)
		{
			g.drawString("Button pressed!", 20, 20);
		}
	}
	
	public void keyTyped(KeyEvent e) 
	{
		if (e.getKeyCode() == KeyEvent.VK_UP)
		{
			bool = true;
		}
	}

	public void keyPressed(KeyEvent e) 
	{
	}

	public void keyReleased(KeyEvent e) 
	{
	}
}

Wenn ihr mir sagen würdet was da falsch ist wäre mir schon viel gehoflen =)
 

Wildcard

Top Contributor
Ein KeyListener direkt auf einem Applet/Frame macht Probleme. Geh den Umweg über ein neues Panel:
Code:
public class Taste extends Applet 
{ 

    private MyPanel2 panel;
    
   public void init() 
   { 
      setBackground (Color.WHITE); 
      setLayout (null); 
      panel = new MyPanel2();
      panel.setSize(100,100);
      add(panel);
      panel.addKeyListener(new KeyAdapter()
    {
        public void keyPressed(KeyEvent e)
        {
           panel.setBool(true);
           panel.repaint();
            
        }
    });
      panel.requestFocus();
      
   } 
   
} 

class MyPanel2 extends Panel
{
    boolean bool = false; 
    public void paint(Graphics g) 
    { 
       if (bool) 
       { 
          g.drawString("Button pressed!", 20, 20); 
       } 
    } 
    
    public void setBool(boolean bool)
    {
        this.bool=bool;
    }
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben