我试图在java中制作游戏,只是一个简单的平台游戏,但我在运行代码时遇到了困难。我似乎无法得到关键印刷机的任何回复。我认为唯一没有正常工作的是keyPressed和keyReleased函数。以下是相关代码。
public ReflexPanel() {
initBoard();
setFocusable(true);
addKeyListener(this);
Timer timer = new Timer(1000/120, this);
timer.start();
}
private void initBoard() {
loadMenu();
int w = menu.getWidth(this);
int h = menu.getHeight(this);
setPreferredSize(new Dimension(w, h));
}
private void step() {
if(mainMenu){
if(ePressed) {
System.exit(0);
}
if(hPressed) {
loadScores();
repaint();
}
}
}
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 'e') {
ePressed = true;
}
if (e.getKeyCode() == 'h') {
hPressed = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == 'e') {
ePressed = false;
}
if (e.getKeyCode() == 'h') {
hPressed = false;
}
}
@Override
public void actionPerformed(ActionEvent e) {
step();
}
默认情况下,ePressed和hPressed变量只是布尔值设置为false,而loadScores调用png文件。
答案 0 :(得分:3)
你不能这样做:
if(e.getKeyCode() == 'e'){
// code logic
}
KeyEvent::getKeyCode
不会返回您在键盘上按下的字符。它“返回与此事件中的键关联的整数keyCode”。使用KeyEvent::getKeyCode
时,您必须使用班级中预定义的KeyEvent key constants值。例如:
if(e.getKeyCode() == KeyEvent.VK_E){
// code logic
}
或者您可以使用KeyEvent::getKeyChar
“返回与此事件中的键相关联的字符”。
答案 1 :(得分:2)
您正在使用getKeyCode()
返回int
值,其中包含KeyEvent
类中给出的常量,例如KeyEvent.VK_E
。
您希望使用直接返回getKeyChar()
的{{1}}。
'e'