我有一个显示弓箭手的游戏,我试图对其进行设置,以便在按下我的按钮时,允许用户在屏幕上的任意位置单击,然后在发生点击的位置设置一个新的弓箭手。我的代码当前允许我单击屏幕并设置新的弓箭手,而不管是否按下按钮。有人可以解释是什么错误,因为尽管一旦按下按钮,MouseEvent就会在场景中发生。

 myButton.setOnMouseClicked(
                    new EventHandler<MouseEvent>()
                    {
                        public void handle(MouseEvent e)
                        {
                            gc.setFill(color);
                            gc.fillRect(0,0,width,height);
                            scene.setOnMouseClicked(new EventHandler<MouseEvent>()
                            {
                                public void handle(MouseEvent e)
                                {
                                    archer.setX((int)e.getSceneX());
                                    archer.setY((int)e.getSceneY());
                                    archer.drawCharStand(gc);
                                }
                            });
                        }
                    });

最佳答案

您可以使用ToggleButton,以便仅在选择切换按钮时放置弓箭手:

private ToggleButton myButton = new ToggleButton("Place Archer");

// ...

scene.setOnMouseClicked(e -> {
    if (myButton.isSelected()) {
         archer.setX((int)e.getSceneX());
         archer.setY((int)e.getSceneY());
         archer.drawCharStand(gc);
         myButton.setSelected(false);
    }
});


放置弓箭手后,最后一行将“自动”取消选择切换按钮。如果您希望用户能够轻松放置多个弓箭手(并且必须手动关闭该模式),请省略该行。

关于java - 处理嵌套事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40141251/

10-11 04:39