我是一個新的Java程序員,仍然在學習即是。我爲學校做了一個簡單的遊戲,只需要鍵盤輸入作爲主要功能。我遇到了一個讓我瘋狂的小問題。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類。
時,我點擊了一次,只需點擊它通常某種原因,它讀取它,好像我多次,原因是它計算的按鈕是如何長按點擊它。現在我無法控制某人按下按鍵的方式,這會導致我的遊戲出現問題。
我只是需要的代碼讀取每個按鍵作爲一個輸入,而不是多個。
如果我不是足夠清楚或者我需要發佈更多的代碼,請告訴我。 預先感謝您。
這是什麼_KeyManager_類? – Berger
你不能使用掃描儀嗎? –
你可以請你發佈'KeyManager'對象的代碼,以及調用getInput()'的地方嗎?如果getInput()被重複調用*和*'handler.getKeyManager()。如果關鍵是關閉(而不是按下),則'等'爲'true',這可能是問題的原因。 –