KeyListener auf Applet mit Runnable

wessi86

Mitglied
Guten Abend!

Erstmal vorab:
Ich weiß, dass es zu dem Thema KeyListener schon einige Threads gibt und auch ausreichend Lektüre im Internet. Ich habe mir das auch alles angeschaut, aber es nicht hinbekommen zu lösen, oder mein Problem explizit gefunden.

Ich habe versucht, auf zwei verschiedene Arten einen KeyListener zu meinem Applet hinzuzufügen, welches immer zu dem Problem führt, dass das Spiel hängen bleib. Es handelt sich um ein 2d-Rollenspiel, in welchem man den Spieler mittels Mausklicks steuern kann.
Nun erstmal die beiden Varianten, in denen ich es mit dem KeyListener versucht habe.
1.: KeyListener in der klasse implementieren und die notwendigen Methoden überschreiben
Java:
public class DeluxeRPG extends Applet implements Runnable, KeyListener
[...]
@Override
    public final void init() {
        addKeyListener(this);
[...]
@Override
    public void keyTyped(KeyEvent e) {
        [...]
    }

    @Override
    public void keyPressed(KeyEvent e) {
        [...]
    }

    @Override
    public void keyReleased(KeyEvent e) {
        [...]
    }

2.: In der Init-Methode einen KeyListener hinzufügen und direkt die notwendigen Methoden überschreiben
Java:
@Override
    public final void init() {
        this.addKeyListener(new KeyListener() {
        @Override
        public void keyPressed(KeyEvent e) {
            [...]
        }
        @Override
        public void keyReleased(KeyEvent e) {
            [...]
        }
        @Override
        public void keyTyped(KeyEvent e) { 
            [...]
        }
        });

Meine Vermutung liegt darin, dass ich (trotz Maussteuerung) keiner Klasse einen MouseListener hinzugefügt habe und ich nicht wirklich verstehe, warum ich den Spieler trotzdem so bewegen kann.

Mfg, Christian
 

Ebenius

Top Contributor
KeyListener funktionieren immer nur auf einer Komponente die Fokus hat. Ich gehe also einfach davon aus, dass Dein Applet nicht den Fokus hat, sondern irgend welche Komponenten die darauf liegen. Richtig?

Es gibt drei Möglichkeiten, weiter zu machen. Welche Möglichkeit Du nehmen solltest, hängt davon ab, was Du mit den KeyEvents machen möchtest.
  1. Key Bindings (InputMap und ActionMap auf dem Applet); siehe Java™ Tutorials: How to Use Key Bindings
  2. Key Listener auf den Komponenten die Fokus haben können (das fällt wahrscheinlich aus, aber ich kenne ja Dein Spiel nicht)
  3. AWTEventListener auf dem Toolkit
Beschreib doch mal Dein Programm und was die Tasten tun sollen. Normaler Weise würde ich stets 1. empfehlen, aber ich hab keine Ahnung von Spieleentwicklung. Da tickt die Welt oft anders. :)

Ebenius
 

wessi86

Mitglied
Hi!
Eigentlich liegen keine Komponenten mehr auf dem Applet, ich zeichne da direkt drauf. Aber ich konnte das Problem jetzt lösen. Es lag tatsächlich an dem MouseListener, den ich nirgendwo hinzugefügt habe. (Sorry, die Idee kam mir erst, als ich den Thread schon fertig geschrieben habe)
Jetzt habe ich der Applet-Klasse nen MouseListener hinzugefügt und nun funktioniert es wunderbar.
Mich würde aber trotzdem interessieren, wieso ich den Spieler vorher mit der Maus bewegen kann.
Hier mal die Zeilen Code, die mit der Bewegung zu tun hatten.
1. Klasse des Applets
Java:
    @Override
    public final boolean mouseDown(final Event e, final int x, final int y) {
                if (player.click(x, y)) {
                    
                    return true;
                }
            return true;
    }

    @Override
    public final void run() {
        // Erniedrigen der ThreadPriority um zeichnen zu erleichtern
        th.setPriority(Thread.MIN_PRIORITY);

        while (true) {

            [..]
            
            goX = player.getMausX();
            goY = player.getMausY();
            //Bewegung nach rechts
            if (400 < goX && maze.playerColYRight()) {
                /**Koordinaten zum zeichnen des Maze' ändern
                 *und Mausposition andern, bis der der Player an der richtigen
                 * Position ist.
                 */
                maze.playerMoveRight();
                drawMaze.scrollMaze(1, 0);
                player.moveMouse(-1, 0);
            }

2. Klasse des Spielers
Java:
    public void move (int x, int y) {
		pos_x += x;
		pos_y += y;
    }

    public boolean click (int maus_x, int maus_y) {
                x = maus_x;
		y = maus_y;
		return true;
    }

    public double getMausX(){
        return x;
    }

    public double getMausY(){
        return y;
    }

    public void setMausXY(int a, int b) {
        x = a;
        y = b;
    }
    
    public void moveMouse(int a, int b) {
        x += a;
        y += b;
    }

Das hatte ich so aus einem Tutorial und wie gesagt, keiner Klasse wurde ein MouseListener hinzugefügt.

Zu den Listenern hätte ich nun noch 2 weitere Fragen. Zum einen, ob ich die in eine andere Klasse auslagern kann.
Die andere Frage betrifft den MouseListener. Momentan ist es so, dass der Spieler immer dahin geht, wo ich hinklicke, allerdings muss man für jede Position einmal klicken. Ich hätte es lieber, dass sich die ganze Zeit die Mausposition bei gedrückter Maustaste aktualisiert. Quasi die Steuerung so wie bei Diablo, wo der Charakter dem Mauszeiger bei gedrückter Maustaste folgt.

Danke für die Antwort am späten Abend und schöne Grüße,
Christian
 

Ebenius

Top Contributor
Was passiert denn in Zeile 17 (bezieht sich auf Code & Zeilennummern oben, Applet) in der main loop? Da wird sicher irgendwo mal PointerInfo oder ähnliches abgefragt. Oder auch die absolute Mausposition über das Applet. In Spielen arbeitet man ja angeblich oft ohne MouseListener und stattdessen mit einer main loop die den Status der Maus abfragt.

Ebenius
 

wessi86

Mitglied
In Zeile 17 steht folgendes:
Java:
            //Wenn der Spieler ein neues Level betritt.
            if (newLevel) {
                maze.fillMaze();
                maze.createRooms();
                Maze.setMonster();
                newLevel = false;
            }
Das ist lediglich eine Abfrage, ob ein neus Level gezeichnet werden soll, weil alles dynamisch generiert wird.
In Spielen arbeitet man ja angeblich oft ohne MouseListener und stattdessen mit einer main loop die den Status der Maus abfragt.
Davon habe ich noch nie gehört, beschäftige mich auch erst dieses Semester mit Spielen.

mfg, Christian
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P KeyListener im Applet Java Basics - Anfänger-Themen 2
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
G Applet mit Keylistener funktioniert nicht Java Basics - Anfänger-Themen 3
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
T KeyListener Java Basics - Anfänger-Themen 2
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
D KeyListener Java Basics - Anfänger-Themen 7
B Keylistener auf JSpinner reagiert nicht? Java Basics - Anfänger-Themen 3
G KeyListener für die Taste "/" Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben