KeyAdapter 和 KeyEvent 在 Java 中不起作用,该怎么办?
所以我尝试在 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您将
}
错误。You put a
}
wrong.