我在编程的游戏中使用swing接口,并实现了ActionListener和MouseListener。对于这个特殊问题,MouseListener是个问题。
对于mouseEntered方法,我有一系列if语句,它们基本上决定当前悬停的磁贴是否合法构建,光标变为X(指定非法目标),直到调用mouseExited方法为止。除了一件事,这个系统工作正常。
如果敌人目前正在该牌上行走,那么可能会使牌非法建立的标准之一就是。如果我将光标移动到其上有敌人的磁贴上,它实际上会按照我的意图改变。但是,由于这是一种在鼠标进入组件时触发的方法,因此一旦鼠标进入该组件,它就不再更新,直到离开该组件。
因此,如果我的光标位于合法目标的图块上,它将按预期显示默认光标。但是,如果我等待并且敌人进入该磁贴,由于鼠标没有移动,光标将保持默认,因为它仍然是合法目标(当然,我实际构建在磁贴上的方法仍然不会让我建立,因为他们知道这是一个非法的目标,但由于光标无法更新,用户将看不到这一点。同样,将光标留在一个只有非法因为敌人在那里的瓷砖上,即使在敌人移动之后,光标也会留下X(虽然我的构建方法将再次允许我构建)。
如何使用与参数相同的事件显式调用mouseEntered方法,就像鼠标刚刚移动到当前位置一样?
答案 0 :(得分:1)
你想要做的事情是你的敌人运动的一部分,检查它是否正在移动到鼠标当前所在的方格中。如果敌人移动到同一个方格,鼠标就在那里你只需将光标改为非法目标版本。您还需要确保当敌人移出该方格时再次运行您的检查以查看光标是否需要更改回默认光标。
最简单的方法是设置一个变量来表示鼠标在移动时所处的方格,这样你就不必在每次敌人移动时重新计算鼠标位置。