0

私が現在作成しているゲームでは、3 つの異なるmousePressed方法があります。1 つは単射、1 つは自動射撃、もう 1 つは近接攻撃です。自動発射用はスイングを使用するため、他の方法でそれらを使用しTimerてオーバーライドできます。mousePressedtimer.stop();

しかし、単一の火はメソッドを直接mousePressed呼び出すので、他の. 以下のコードは、発射の方法を示しています (箇条書きは)。fire()mousePressedArrayList

public void fire(){
    if(!power.getChainsaw()){
        bullet.add(new Bullet(x, y));
    }
}

そのため、プレイヤーが近接武器を手に入れたら、MouseListener1 回の発砲のために を削除する必要があります。以下のコードを試しましたが、うまくいきませんでした。

removeMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e){
        player.mousePressed2(e);
    }   
)};

MouseListenerこれとまったく同じ方法で単発と近接を追加します。これは、実際のmousePressed方法がどのように見えるかです。public void mousePressed2(MouseEvent e){

if(SwingUtilities.isLeftMouseButton(e)){
        timer.stop();
        fire();
    }
}

public void mousePressed3(MouseEvent e){
    if(SwingUtilities.isLeftMouseButton(e)){
        timer.stop();
    }
}

mousePressed2は単発方式で、mousePressed3は近接方式です

4

1 に答える 1

1
removeMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e){
        player.mousePressed2(e);
    }   
)};

ここで何をしているのか見てください。MouseAdapterその場で作成されたインスタンスを削除しています。これは、マウス アダプタの新しいインスタンスが作成されてから削除されることを意味しますが、特定のリスナー インスタンスはどのボタンにもバインドされていないため、何も起こりません。

removeMouseListenerメソッドに正しいリスナーを渡すと、機能します。

MouseAdapter myListener = new MouseAdapter() {
   public void mousePressed(MouseEvent e){
        player.mousePressed2(e);
   } 
};
someButton.addMouseListener(myListener);
// then when you want to remove it, use the same referenece.
someButton.removeMouseListener(myListener);
于 2013-05-03T13:31:09.147 に答える