gpt4 book ai didi

java - 发生某些情况时删除 MouseListener

转载 作者:行者123 更新时间:2023-12-01 14:37:21 25 4
gpt4 key购买 nike

在我目前制作的游戏中,我有三种不同的 mousePressed 方法,一种用于单次射击,一种用于自动射击,一种用于近战攻击。因为自动开火的方法使用了 Swing 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)无效mousePressed2(MouseEvent e){

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

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

mousePressed2 是单火方法,mousePressed3 是近战方法

最佳答案

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

看看你在这里做什么。您将删除就地创建的 MouseAdapter 实例。这意味着将创建一个新的鼠标适配器实例,然后将其删除,但由于特定的监听器实例未绑定(bind)到任何按钮,因此不会发生任何事情。

将正确的监听器传递给 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);

关于java - 发生某些情况时删除 MouseListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com