在我正在制作的游戏中,我有三种不同的mousePressed
方法,一种用于单火,一种用于自动射击,一种用于近战攻击。因为自动点火使用摆动Timer
,我可以在其他mousePressed
方法中使用timer.stop();
覆盖它。
但单一火mousePressed
直接调用fire()
方法,因此我无法以任何方式覆盖其他mousePressed
。下面的代码显示了触发的方法(项目符号为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
方法。
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
是近战方法
答案 0 :(得分: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);