2012-04-30 10 views
1

私はタンクゲームを作成しようとしていますが、まだJavaでグラフィックスプログラミングを行う方法を学んでいます。最初は、KeyListenersを使って2つの画像(どちらがどちらのプレーヤーが使用されているかに依存します)のいずれかを動かそうとしました。 Key Bindingsがこれについてもっと効果的な方法かもしれないと言われました。キーバインディングを使用して画像を移動する

public class FrameMain extends JFrame{ 
    ... 
     public FrameMain(){ 

      this.addBindings(); 

addBindings()メソッド::ここに私のコードのいくつかはある

protected void addBindings() { 
     InputMap inputMap = pnlPlay.getInputMap();  

     KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, Event.KEY_PRESS); 
     inputMap.put(key, pnlPlay.pnlGame.MoveTank(2, pnlPlay.nPlayer)); 

     key = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, Event.KEY_PRESS); 
     inputMap.put(key, pnlPlay.pnlGame.MoveTank(-2, pnlPlay.nPlayer)); 
} 

MoveTank方法:

public int MoveTank(int xChange, int nPlayer){ 

     System.out.println("move "+nPlayer); 

     if(nPlayer==0){ 
      tank1.x+=xChange; 
     }else tank2.x+=xChange; 

     repaint(); 
     return 1; 
} 

私がいる問題は、私は押したときに、ということです右または左の矢印キーのいずれか、私はどんな種類の応答も得ていない。それは "移動#"を印刷する必要がありますが、そうではありません。誰かが私が間違ったやり方を知っていたり、同じことをするコードの指示で私を指摘することができたら、私はそれを感謝します。私はコードを作業順に見てからそれを使って遊ぶのがベストです。このコードで

+2

方法は小文字で始めるべきコード例が含まれています。 – BVSmallman

+0

ここに掲載されている私の例をチェックすることができます:[Swing Timer and Key Bindings](http://stackoverflow.com/a/6887354/522444)。 –

+0

ありがとう!そのコードはまさに私が探していたものでした。 – user1366342

答えて

2

2つのこと:

  • 私は、アクション・マップについては何も表示されません。入力マップは、キーをアクション識別子にマップし、アクションマップは、識別子と実際のアクションとの間のリンクです。だから、正しい識別子でアクションマップで自分の行動を置く場合は、通常

  • InputMap inputMap = component.getInputMap(); 
    ActionMap actionMap = component.getActionMap(); 
    Action actionToTrigger = ...; 
    actionMap.put("myAction", actionToTrigger); 
    inputMap.put(key, "myAction"); 
    

    のようなコードを持っており、それはまだ動作しません、あなたは間違って入力されたマップを使用している可能性があります。 Swingキーバインドガイドで説明した3つの入力マップがあります。それは、より詳細にこのすべてを説明しているようにおそらく、あなたは再びSwing keybindings tutorialに相談してください他の人

で試してみてください+ Javaで

関連する問題