KeyAdapter 和 KeyEvent 在 Java 中不起作用,该怎么办?

发布于 2025-01-19 02:38:36 字数 1928 浏览 3 评论 0原文

所以我尝试在 YouTube 频道 BroCode 的帮助下制作一个贪吃蛇游戏。我首先复制了完全相同的代码来学习,但 getkeycode 不起作用。意味着我按了左、右、上、下键,但蛇没有移动。移动功能与视频相同。这是移动函数-

public void move() {
        for(int i=bp; i>0; i--) { //bp means snake body parts
            x[i] = x[i-1];
            y[i] = y[i-1];
        }
        
        switch(dir) {
        case 'U':
            y[0] = y[0]-us;
            break;
        case 'D':
            y[0] = y[0]+us;
            break;
        case 'L':
            x[0] = x[0]-us;
            break;
        case 'R':
            x[0] = x[0]+us;
            break;
        }
    }

另一个问题是在视频中,在创建一个扩展 KeyAdapter 的内部类之后,在按键方法之前有一个 @Override,但是当我尝试使用它时,它给了我一个错误,错误只会消失当我删除@Override时。我在网上查了一下,每当有人使用 getkeycode 或 keyevent 方法时,总会有 @Override 在那里。这段代码来自我查过的互联网,这里他们使用了 @Override 并且没有错误 -

@Override
public void keyPressed(KeyEvent e)
{
  if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
  {
    e.consume();
  }
}

那么这是真正的问题吗?这就是蛇不动的原因吗? 我尝试按下按键的代码如下所示- 代码

public class MyKeyAdapter extends KeyAdapter{

        public void keypressed(KeyEvent e) {
            switch(e.getKeyCode()) {
            case KeyEvent.VK_LEFT:
                if(dir != 'R') {
                dir = 'L';
                break;}
            case KeyEvent.VK_RIGHT:
                if(dir != 'L') {
                dir = 'R';
                break;}
            case KeyEvent.VK_UP:
                if(dir != 'D') {
                dir = 'U';
                break;}
            case KeyEvent.VK_DOWN:
                if(dir != 'U') {
                dir = 'D';
                break;}
            }
        }
    }

    public void actionPerformed(ActionEvent e) {
        if(running) {
            move();
            checkApple();
            checkCol();
        }
        repaint();
    }

这个项目对我来说非常重要,我必须做这个。有人可以帮我吗?我真的不明白为什么当我按下键时蛇没有动。我也用WASD键试过了,还是不行。

So I was trying to make a snake game using the help of BroCode, a youtube channel. I copied the exact same code first to learn but the getkeycode is not working. Means I am pressing the left, right, up, down key but the snake isn't moving. The move function is the same as the video. Here is the move function-

public void move() {
        for(int i=bp; i>0; i--) { //bp means snake body parts
            x[i] = x[i-1];
            y[i] = y[i-1];
        }
        
        switch(dir) {
        case 'U':
            y[0] = y[0]-us;
            break;
        case 'D':
            y[0] = y[0]+us;
            break;
        case 'L':
            x[0] = x[0]-us;
            break;
        case 'R':
            x[0] = x[0]+us;
            break;
        }
    }

Another problem is in the video, after making an inner class extending KeyAdapter, an @Override is there before the keypressed method, but when I try to use it, it gives me an error, the error only goes away when I remove the @Override. I checked on internet that whenever someone use this getkeycode or keyevent methods, there is always the @Override in there. This code is from the internet that I checked, here they used @Override and there is no error-

@Override
public void keyPressed(KeyEvent e)
{
  if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
  {
    e.consume();
  }
}

So is that the real problem? Is that why the snake isn't moving?
My code where I tried to get the keypressed is shown below-
Code

public class MyKeyAdapter extends KeyAdapter{

        public void keypressed(KeyEvent e) {
            switch(e.getKeyCode()) {
            case KeyEvent.VK_LEFT:
                if(dir != 'R') {
                dir = 'L';
                break;}
            case KeyEvent.VK_RIGHT:
                if(dir != 'L') {
                dir = 'R';
                break;}
            case KeyEvent.VK_UP:
                if(dir != 'D') {
                dir = 'U';
                break;}
            case KeyEvent.VK_DOWN:
                if(dir != 'U') {
                dir = 'D';
                break;}
            }
        }
    }

    public void actionPerformed(ActionEvent e) {
        if(running) {
            move();
            checkApple();
            checkCol();
        }
        repaint();
    }

This project is so important to me, I have to do this one. Can somebody help me please? I really don't understand why the snake isn't moving when I pressed the key. I tried it with WASD keys too, still it didn't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笔一画续写前缘 2025-01-26 02:38:36

您将}错误。

 WRONG: case KeyEvent.VK_LEFT:
                if(dir != 'R') {
                dir = 'L';
                break;}

  RIGHT  case KeyEvent.VK_LEFT:
                if(dir != 'R') {
                dir = 'L';
                }
                break;

You put a } wrong.

 WRONG: case KeyEvent.VK_LEFT:
                if(dir != 'R') {
                dir = 'L';
                break;}

  RIGHT  case KeyEvent.VK_LEFT:
                if(dir != 'R') {
                dir = 'L';
                }
                break;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文