Java-Keyboard输入每次点击多次注册

时间:2016-02-03 16:37:19

标签: java eclipse

我是一名新的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类。

出于某种原因,当我点击它一次,只是正常点击它,它就像我多次点击它一样读取它,原因是它计算了按下按钮的时间。现在我无法控制某人按键的方式,这会给我的游戏带来麻烦。

我只需要代码将每个按键读取为一个输入,而不是多个。

如果我不够清楚或者我需要发布更多代码,请告诉我。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

你需要某种逻辑来检查按键是否被按下并阻止进一步计数 - 直到它被释放。如果这是你正在拍摄的逻辑。即。

if(!pressed) { if (key pressed once) then pressed=true; }

if(key released) then pressed=false