1
java KeyListener類沒有用於雙擊按鍵的選項,所以我嘗試使用多個數組和列表列表來創建自己的數組。在java中使用數組和列表的雙擊函數用於計算所有事件爲雙擊
這裏是培訓相關代碼
private ArrayList<Integer> ButtonsPressedChar = new ArrayList<Integer>();
private ArrayList<Long> ButtonsPressedTimes = new ArrayList<Long>();
private int[] PossiblePresses = new int[222];
private ArrayList<Integer> DoublePresses = new ArrayList<Integer>();
private ArrayList<Integer> ToBeRemovedChars = new ArrayList<Integer>();
private ArrayList<Integer> ToBeRemovedTimes = new ArrayList<Integer>();
private Long LastTimeForDoublePress;
private Long NowTime;
private int PositionTime;
private int PositionChar;
public void DetectDoubleKeyPresses(){
PositionTime = 0;
PositionChar = 0;
NowTime = System.currentTimeMillis();
for(int temp : PossiblePresses){
PossiblePresses[temp] = 0;
}
for(Long temp: ButtonsPressedTimes){
if(temp - NowTime >= 300){
ButtonsPressedChar.remove(PositionTime);
ToBeRemovedTimes.add(PositionTime);
System.out.println("removed");
}
PositionTime++;
}
for(int temp: ToBeRemovedTimes){
ButtonsPressedTimes.remove(temp);
System.out.println("DONE");
}
DoublePresses.clear();
for(Integer temp: ButtonsPressedChar){
System.out.println("hi 1");
if(PossiblePresses[temp] == 0){
System.out.println("First Press" + temp + PossiblePresses[temp]);
PossiblePresses[temp] = 2;
}
else if(PossiblePresses[temp] == 2){
DoublePresses.add(temp);
System.out.println(ButtonsPressedChar.size());
ToBeRemovedChars.add(temp);
ButtonsPressedTimes.remove(PositionChar);
System.out.println("DOUBLE PRESS" + temp.toString()+ PossiblePresses[temp]);
}
System.out.println("hi 2");
PositionChar++;
}
for(Integer temp: ToBeRemovedChars){
while(ButtonsPressedChar.contains(temp)){
ButtonsPressedChar.remove(temp);
}
System.out.println("DONE");
}
ToBeRemovedChars.clear();
LastTimeForDoublePress =NowTime;
}
public class Keys implements KeyListener{
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
if(ButtonsHeld.contains(e.getKeyCode())){
Integer tempInteger = new Integer(e.getKeyCode());
ButtonsHeld.remove(tempInteger);
}
else
System.out.println("ERROR");
System.out.println(e.getKeyCode());
ButtonsPressedChar.add(e.getKeyCode());
ButtonsPressedTimes.add(System.currentTimeMillis())
}
@Override
public void keyPressed(KeyEvent e) {
if(ButtonsHeld.contains(e.getKeyCode())){
System.out.println("Error: Attempted Key Press Twice, original press was not removed from ButtonsHeld");
}
else if(!ButtonsHeld.contains(e.getKeyCode())){
ButtonsHeld.add(e.getKeyCode());
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
public ArrayList<Integer> ButtonsHeld = new ArrayList<Integer>();
public void KeyHeldChecker(){
}
}
我很抱歉,如果一些支架是怪異的地方,我不得不調整一切來得到它的代碼塊
檢測雙核心印刷機每秒執行60次。 'hi 1'和'hi 2'只是我調試的一部分,用於查看正在執行的內容。這是當J(鑰匙代碼74),按下一個什麼時間執行:
74 hi 1 First press740 hi 2 hi 1 1 DOUBLE PRESS742 hi 2 DONE
起初我還以爲可能印刷機沒有被正確地清除,但for循環似乎工作。如果有人知道爲什麼這不起作用,或者甚至只是一個更好的方式,這將是驚人的。
對不起,格式不好,我真的不能得到它的工作,並沒有找到任何他們不應該四處空間。我希望這不會讓人難以理解。
對不起Java魔鬼,我應該更具體。我需要的原因是在雙人遊戲中檢測到雙擊,兩個人使用鍵盤可能會互相干擾,或者有人甚至可能會按下多個按鈕來干擾自己。附:雙擊是用於破折號功能 –
Java惡魔不能讓一個玩家雙擊,而另一個玩家雙擊則干擾雙擊程序。如果你知道如何做到這一點,那將是非常棒的,但如果你知道爲什麼它不工作,那會更好。 –
@SamChapman是的,我知道,他們可能會干擾每個人的新聞。好吧,如果是這種情況,那麼我假設每個玩家只設置了密鑰,這樣你就可以讓我的例子不是靜態的,然後爲每個玩家設置一個探測類的實例,並在你的聆聽者中確定按鍵的作用和參考即玩家檢測實例。對不起,我現在沒有時間爲你起草一些東西。 –