0

在我目前正在制作的游戏中,我有三种不同的mousePressed方法,一种用于单发,一种用于自动射击,一种用于近战攻击。因为用于自动射击的那个使用挥杆,所以我可以通过在其他方法中使用Timer来覆盖它。mousePressedtimer.stop();

但是单火直接mousePressed调用该fire()方法,因此我不能以任何方式从其他火中覆盖它mousePressed。下面的代码显示了开火的方法(子弹是 a ArrayList)。

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

当玩家获得近战武器时,我因此需要移除MouseListener单次射击。我已经尝试了下面的代码,但它没有工作。

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

MouseListener我以与此完全相同的方式添加单火和近战。这就是实际的mousePressed方法。公共无效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 回答