1

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

    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;
}

私が抱えている問題は、右または左の矢印キーを押しても、何の反応も得られないことです。「move #」と表示されるはずですが、そうではありません。誰かが私が間違ったことを知っているか、同じことをするコードの方向性を教えてくれるなら、私はそれを感謝します. 私は、コードが正常に動作するのを見て、それをいじってみるのが一番勉強になります。

4

1 に答える 1

2

このコードの 2 つのこと:

  • アクション マップについては何も表示されません。入力マップはキーをアクション識別子にマップし、アクション マップは識別子と実際のアクションの間のリンクです。したがって、通常は次のようなコードがあります

    InputMap inputMap = component.getInputMap( );
    ActionMap actionMap =  component.getActionMap();
    Action actionToTrigger = ...;
    actionMap.put( "myAction", actionToTrigger );
    inputMap.put( key, "myAction" );
    
  • 正しい識別子を使用してアクション マップにアクションを配置しても動作しない場合は、間違った入力マップを使用している可能性があります。Swing キーバインド ガイドで説明されているように、3 つの異なる入力マップがあります。他の人と試してみてください

おそらく、Swing keybindings チュートリアルを再度参照する必要があります。詳細については + コード例が含まれています

于 2012-04-30T21:18:50.917 に答える