Java - KeyListener не работает - PullRequest
2 голосов
/ 29 сентября 2011

Это заставляет меня хотеть рвать на себе волосы весь день.Я пытаюсь сделать так, чтобы при нажатии клавиши со стрелкой вправо моя скорость возросла до 10. Я знаю, что мои методы, которые заставляют мой спрайт двигаться, работают, потому что, если я заранее установлю значение, оно будет перемещаться по экрану.Это KeyListener, который ничего не делает:

import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Sprite implements KeyListener{
    public Image player = Toolkit.getDefaultToolkit().getImage("player.png");
    int x, y, dx, dy;

    public void doInit(){
        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(600, 400);
        window.setLocationRelativeTo(null);
        window.getContentPane().add(new ImageDraw());
        window.setVisible(true);
        window.setIgnoreRepaint(true);
        window.createBufferStrategy(2);
        window.getContentPane().addKeyListener(this);
    }

    public Image getSpriteHandle(){
        return player;
    }

    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_RIGHT){
                dx = 10;
         }
    }   //end keyPressed

    public void keyReleased(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_RIGHT){
                dx = 0;
         }
    }

    public void keyTyped(KeyEvent arg0) {

    } 

    public int moveX(){
        return dx;
    }

}   //end class

Пожалуйста, помогите мне!

1 Ответ

5 голосов
/ 29 сентября 2011

Это KeyListener, который ничего не делает

Вы НЕ должны использовать KeyListener.

Swing был разработан для использования с привязками клавиш.Вы можете отобразить Action на KeyStroke, даже если компонент не имеет фокуса.

...