-1

我有一个Keylistener游戏课程,我正在制作一个有问题的游戏。我似乎无法通过按键使 pacman 移动。似乎该Keylistener方法从未被调用过。我对 Java 和 GUI 界面比较陌生,所以如果我的编码有点生疏,请原谅我。

import java.awt.event.*;

public class PacRunner implements ActionListener, KeyListener
{
    private static Grid gr;
    public static void main (String[] args)
    {   
    gr = new Grid();
    gr.addGhost(new Location(4,11));
    gr.movePac(new Location(6,11));
    gr.show();
    }

   public void keyPressed(KeyEvent e)
   {
        if(e.getKeyCode() == KeyEvent.VK_UP) gr.move(Location.UP);          
        else if(e.getKeyCode() == KeyEvent.VK_DOWN) gr.move(Location.DOWN);
        else if(e.getKeyCode() == KeyEvent.VK_LEFT) gr.move(Location.LEFT);
        else if(e.getKeyCode() == KeyEvent.VK_RIGHT) gr.move(Location.RIGHT);
    }


    public void keyReleased(KeyEvent e) {}

    public void keyTyped(KeyEvent e) {}


    @Override
    public void actionPerformed(ActionEvent e) {}
}
4

2 回答 2

0

您尚未注册您的 KeyListener。必须添加 KeyListener。

java.awt.Component 类包含方法addKeyListener(KeyListener l)

您必须确定java.awt.Component要拦截事件的对象。一旦您确定了该组件,您将使用PacRunner以下KeyListener参数调用此方法:

component.addKeyListener(myPacRunner);

或者,如果从 PacRunner 实例中调用该方法:

component.addKeyListener(this);

为了在您提供的代码中实现此模式,假设类Gridextends Component,您将首先实例化您的 PacRunner,然后将该 PacRunner 实例作为 a 添加KeyListenerGrid

public static void main (String[] args)
{
    PacRunner myPacRunner = new PacRunner(); // An Empty constructor inherited from Object
    gr = new Grid();
    gr.addKeyListener(myPacRunner);
    ...
}

为了更完整地处理该主题。请参阅Java 教程中的如何编写密钥侦听器。

于 2014-01-14T13:09:09.937 回答
0

您可能忘记的是在您的主要方法中添加这行代码:

component.addKeyListener(keyListener)
于 2014-01-14T13:00:36.337 回答