我是一名新的Java程序员,仍在学习。我正在为学校做一个简单的游戏,只需要键盘输入作为主要功能。我遇到了一个让我疯狂的小问题。
我已经设置了KeyManager,而在另一个类中我设置了这个:
编辑:我在getInput()中添加了某种逻辑,但我仍然遇到同样的问题。编辑将高于其他if语句。
private void getInput(){
int OneSec =1000;
long Time = System.currentTimeMillis();
long Time2= System.currentTimeMillis();
long longtime = 999999;
if(Time>OneSec){
Time=longtime-Time2;
}
if(Time<OneSec){
if(handler.getKeyManager().one){
x1++;
System.out.println("1 has been pressed");
}
if(handler.getKeyManager().two){
x2++;
System.out.println("2 has been pressed");
}
if(handler.getKeyManager().three){
x3++;
System.out.println("3 has been pressed");
}
}
}
我运行游戏并单击1,2或3.在控制台中它给我这个:
1已被按下
1已被按下
1已被按下
1已被按下
刻度和帧60
压
1已被按下
1已被按下
package dev.chris.tilegame.input;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyManager implements KeyListener {
private boolean[]keys;
public boolean up, right, down, left,one,two,three;
public KeyManager(){
keys = new boolean[256];
}
public void tick(){
//up=keys[KeyEvent.VK_W];
//down=keys[KeyEvent.VK_S];
//left=keys[KeyEvent.VK_A];
//right=keys[KeyEvent.VK_D];
one=keys[KeyEvent.VK_1];
two=keys[KeyEvent.VK_2];
three=keys[KeyEvent.VK_3];
}
@Override
public void keyPressed(KeyEvent e) {
keys[e.getKeyCode()]=true;
System.out.println("pressed");
}
@Override
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()]=false;
}
@Override
public void keyTyped(KeyEvent e) {
}
}
这是我正在使用的KeyManager类。
出于某种原因,当我点击它一次,只是正常点击它,它就像我多次点击它一样读取它,原因是它计算了按下按钮的时间。现在我无法控制某人按键的方式,这会给我的游戏带来麻烦。
我只需要代码将每个按键读取为一个输入,而不是多个。
如果我不够清楚或者我需要发布更多代码,请告诉我。 提前谢谢。
答案 0 :(得分:0)
你需要某种逻辑来检查按键是否被按下并阻止进一步计数 - 直到它被释放。如果这是你正在拍摄的逻辑。即。
if(!pressed) { if (key pressed once) then pressed=true; }
if(key released) then pressed=false