【发布时间】:2016-10-06 07:02:19
【问题描述】:
这是我的第一个问题,所以我会直接回答。
我一直在使用 Eclipse Neon IDE 用 Java 开发一个小型 2D 平台游戏。到目前为止,我已经能够克服我遇到的任何问题,除了我将要告诉你的问题。
由于游戏控件通常进行,我已经设置了 WASD 键用于移动和空格键用于跳跃。我控制的角色确实响应了按键输入,所以我知道这段代码可以工作,但是由于某种原因,在程序运行了大约 3 分钟左右后,角色停止接收按键输入并且我收到此错误:
java.awt.AWTEventMulticaster.keyPressed(Unknown Source)
我尝试过修改代码,看看是否可以自己修复它,但我不知道是什么导致了问题。
这是我的 Player 类的相关代码部分。您可能不需要关注 keyPressed() 和 keyReleased() 方法中的任何变量,只需关注方法本身:
public void keyPressed(KeyEvent keyID) { //This method checks to see which keys the user has pressed
int key = keyID.getKeyCode();
if (debug == false && key == KeyEvent.VK_F1) {
debug = true;
}
else if (debug == true && key == KeyEvent.VK_F2) {
debug = false;
}
if (death == false) {
if (key == KeyEvent.VK_SPACE && jumping == false) {
//Player.key = 2;
velY = ySpeed;
jumping = true;
Sound.playSound("audio/playerJump.wav");
}
else if (key == KeyEvent.VK_D && rightIntersect == true) {
velX = 0;
lastKeyPressed = 'D';
Player.key = 1;
}
else if (key == KeyEvent.VK_D && rightIntersect == false) {
velX = xSpeed;
lastKeyPressed = 'D';
Player.key = 1;
}
if (key == KeyEvent.VK_A) {
velX = -xSpeed;
lastKeyPressed = 'A';
Player.key = -1;
}
}
else if (key == KeyEvent.VK_R && death == true) {
for (int i = 0; i < GameFrame.getPlayerList().size(); i++) {
Player p = GameFrame.getPlayerList().get(i);
GameFrame.removePlayer(p);
GameFrame.addPlayer(new Player(GameFrame.xPosStart, GameFrame.yPosStart));
death = false;
GameFrame.level = 1;
GameFrame.mainTimer.setInitialDelay(0);
GameFrame.mainTimer.start();
}
}
}
public void keyReleased(KeyEvent keyID) { //This method checks to see which keys the user has released
int key = keyID.getKeyCode();
if (key == KeyEvent.VK_A || key == KeyEvent.VK_D) {
Player.key = 0;
velX = 0;
}
}
这是 Player 类引用的 KeyAdapt 类的代码:
public class KeyAdapt extends KeyAdapter {
Player p;
public KeyAdapt (Player player) {
p = player;
}
public void keyPressed (KeyEvent keyID) {
p.keyPressed(keyID);
}
public void keyReleased (KeyEvent keyID) {
p.keyReleased(keyID);
}
同样,这段代码确实有效。它只是在程序运行一定时间后突然停止工作。 有谁知道可能导致此问题的原因?
(如果需要更多信息,我可以提供 Player 类的完整代码)。
【问题讨论】:
-
这通常发生在你告诉它停止接收来自键盘的输入或者你有内存崩溃或者你拔掉键盘时。但也许你是幸运的人有不同的原因。
-
这个变量
death是什么?if (death == false) { -
变量“death”用于检测玩家是否死亡。在这种情况下,只有当 death == false 时才允许玩家控制角色。
标签: java eclipse io keyboard-events