是否有处理在Java中的鼠标事件许多不同的选择标准呢?
-
12-09-2019 - |
题
我正在开发Java中的网格基于SIM卡的比赛,我想知道是否有做以下的标准方法。 我有一个面板,是游戏面板,并且有被点击面板时可能会发生许多不同的事情。例如,建设机房时,有几个阶段,其中拖动鼠标左击将有不同的动作。 现在,我已经做了它的方式,就是用布尔值来检查什么正在建造,那么它是在什么阶段。
有没有处理这样的事情没有更好的或者标准的方式?我有一个快速谷歌,但正如我之前所说,人们对堆栈溢出总是给一个更好的,更具相关性,最新的答案。
我觉得自己还是比较新到Java。
预先感谢。
解决方案
您可以尝试寻找到类似的策略模式的东西。
基本上,您可以通过单击工具栏上的按钮,房间开始。工具栏经过,并告诉使用的房间的地方“的ActionListener电网。据推测除去任何先前的动作侦听器是听
在室温地方的ActionListener又将实现逻辑的所有有趣的位为左/右点击,拖拉等
如果你有多个阶段建立一个房间(比如,放置门,然后窗,然后活板门);的动作侦听器将负责移交控制到下一个阶段:有限状态机的一个位。
因此,通过点击“房间”按钮来启动,“地点室”侦听器添加。拖出你想要的房间是面积,“处室”修改游戏状态,然后更改ActionListener添加到“地方窗口”的听众。循环往复......直到完成为止。
一个非常简单的(非可编译)示例:
class GridPanel extends JPanel
{
void SetMouseListener(MouseListener newListener)
{
for(MouseListener ml : getMouseListeners())
removeMouseListener(ml);
addMouseListener(newListener);
}
}
class ControlPanel extends JPanel
{
GridPanel gameGrid;
void OnRectangleButtonClicked(some stuff)
{
gameGrid.SetMouseListener(new PlaceRoomListener(gameGrid));
}
}
class PlaceRoomListener extends MouseAdapter
{
GridPanel gameGrid;
//constructor, etc
void OnClick(mouse event)
{
gameGrid.doCoolStuff();
gameGrid.SetMouseListener(new PlaceTrapDoorListener());
}
}
//etc
现在,非编译例子不谈,Pyrolistical确实有一点:你通常不希望你的游戏模型和图形界面结合成类单一水珠。所需的模型从GUI分离,并且通过良好定义的接口来操作它。
(另外,也有可能是去有关删除鼠标监听器,然后只是随机删除所有听众更好的方法......我是有点仓促,抱歉)
其他提示
这听起来像你需要确定你的游戏模式/状态,并保持它从你的鼠标操作分开。
您使用MVC?