2014-01-07 43 views
2

我正在開發一個Java 2D遊戲,它需要最多六個鍵同時按下。 遊戲是在同一個鍵盤上同時玩兩個玩家。Java遊戲:如何克服鍵盤的硬件限制

但是,我運行該程序的所有三臺計算機只允許一次最多保存三個密鑰。他們在對三個以上的鍵進行反應時都遇到了麻煩。 似乎在三個按鍵之後按下一個新的鍵已被保持,要麼取消其他鍵保持或被忽略。

我被告知這是一個硬件問題。大多數鍵盤不能同時處理三個以上的按鍵。但是很多遊戲確實需要這些,並且它們不需要特殊的遊戲鍵盤就可以在我的電腦上運行而沒有任何問題。

所以必須有一個解決方案,使任何標準鍵盤上的遊戲可玩。

如果有,請你向我解釋如何在我的程序中編碼? (我使用Key Bindings)。

遊戲的控制:

播放機1

  • 旋轉子畫面和運動的設置角度:左箭頭
  • 旋轉子畫面和運動的設置角度:向右箭頭
  • 前進:向上箭頭
  • 拍攝導彈:ENTER鍵

玩家2

  • 旋轉子畫面和運動的設置角度:'A' 鍵
  • 旋轉子畫面和運動的設置角度:'D'鍵
  • 前進:'W'鍵
  • 拍攝導彈:'T' 鍵

相關的代碼:

Key Bindings部分:

// An action for every key-press. 
// Each action sets a flag indicating the key is pressed. 

    leftAction = new AbstractAction(){ 
     public void actionPerformed(ActionEvent e){  
      keysPressed1[0] = true; 
     } 
    }; 

    rightAction = new AbstractAction(){ 
     public void actionPerformed(ActionEvent e){ 
      keysPressed1[1] = true; 
     } 
    }; 

// And so on... 
// .... 

// An action for every key-release. 
// Each action sets a flag indicating the key was released. 
// This is only necessary for some of the keys. 

    leftReleased = new AbstractAction(){ 
     public void actionPerformed(ActionEvent e){ 
      keysPressed1[0] = false; 
     } 
    }; 

    rightReleased = new AbstractAction(){ 
     public void actionPerformed(ActionEvent e){ 
      keysPressed1[1] = false; 
     } 
    }; 

// And so on... 
// .... 

// Binding the keys to the actions. 

    inputMap.put(KeyStroke.getKeyStroke("UP"),"upAction"); 
    inputMap.put(KeyStroke.getKeyStroke("LEFT"),"leftAction"); 
// etc... 

    actionMap.put("upAction",upAction); 
    actionMap.put("leftAction",leftAction); 
// etc... 

Board類。它擁有大部分遊戲的代碼。 這部分檢查標誌並對按鍵和釋放做出反應。

  keysPressed1 = tank1.getKeys(); // get flags-array of tank1. 
      keysPressed2 = tank2.getKeys(); // get flags-array of tank2. 

      if(keysPressed1[0]==true) // if LEFT is pressed. 
       tank1.setAngle(tank1.getAngle()-3); 

      if(keysPressed1[1]==true) // if RIGHT is pressed. 
       tank1.setAngle(tank1.getAngle()+3); 

      if(keysPressed1[2]==true){ // if UP is pressed. 
       tank1.setDX(2 * Math.cos(Math.toRadians(tank1.getAngle()))); 
       tank1.setDY(2 * Math.sin(Math.toRadians(tank1.getAngle()))); 
      } 

      if(keysPressed1[2]==false){ // if UP is released. 
       tank1.setDX(0); 
       tank1.setDY(0); 
      } 

     // And the same for the second player's keys... 

這主要是如何對我的程序中的按鍵和按鍵發揮作用。當按下或釋放鍵時,標誌被設置。 Board類會在每個遊戲循環週期中重新渲染標誌並作出相應反應。

正如我所說的,程序沒有正確反應超過3個按鍵一次,可能是因爲鍵盤。有沒有辦法編寫解決方案?

幫助將非常感激。 非常感謝

+0

@Sergi它不是。你發佈的問題中的那個人要求一次處理多個按鍵,這不完全是我問的。我知道如何一次處理3個按鍵,但我詢問如何避免導致程序無法接受超過3個的硬件問題。 – user3150201

+0

無法通過軟件來避免此問題。對於鍵盤製造商來說,這樣比較便宜,所以如果你想同時購買更多的按鈕,就必須購買更昂貴的鍵盤。 – Kayaman

+0

那麼我怎麼會在我的電腦上有一款遊戲,而且我一次只能推動三個以上的按鍵,而且工作正常?另外,這款遊戲最多可以有4個玩家在同一個鍵盤上,每次只能按3個按鈕。再次,它在我的電腦上正常工作。所以必須有一種圍繞硬件限制的軟件方式。 – user3150201

回答

0

我不是很熟悉這個話題,但做一些研究,我偶然發現LWJGL。根據你的問題,這是一個Java遊戲庫,看起來很有希望。 Take a look at this.