2016-02-03 38 views
0

我是一個新的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類。

時,我點擊了一次,只需點擊它通常某種原因,它讀取它,好像我多次,原因是它計算的按鈕是如何長按點擊它。現在我無法控制某人按下按鍵的方式,這會導致我的遊戲出現問題。

我只是需要的代碼讀取每個按鍵作爲一個輸入,而不是多個。

如果我不是足夠清楚或者我需要發佈更多的代碼,請告訴我。 預先感謝您。

+4

這是什麼_KeyManager_類? – Berger

+0

你不能使用掃描儀嗎? –

+0

你可以請你發佈'KeyManager'對象的代碼,以及調用getInput()'的地方嗎?如果getInput()被重複調用*和*'handler.getKeyManager()。如果關鍵是關閉(而不是按下),則'等'爲'true',這可能是問題的原因。 –

回答

0

你需要某種邏輯檢查,如果鍵被按下,並阻止進一步的計數 - 直到它被釋放。如果這是你拍攝的邏輯。即

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

if(key released) then pressed=false 
+0

這就是我要去的邏輯,謝謝你的洞察力。 –