gpt4 book ai didi

java - java中是否有一个标准的方法来处理鼠标事件的许多不同选项?

转载 作者:行者123 更新时间:2023-12-02 00:54:57 24 4
gpt4 key购买 nike

我正在用java开发一个基于网格的sim游戏,我想知道是否有一个标准的方法来执行以下操作。我有一个面板,它是游戏面板,单击该面板时可能会发生许多不同的事情。例如, build 房间时,有几个阶段,拖动鼠标和左键单击会有不同的 Action 。现在,我所做的方法是使用 boolean 值来检查正在构建的内容,以及它处于哪个阶段。

有没有更好或标准的方法来处理这样的事情?我快速谷歌了一下,但正如我之前所说,Stack Overflow 上的人们总是给出更好、更相关、最新的答案。

我认为自己对 java 还很陌生。

提前致谢。

最佳答案

您可以尝试研究类似于策略模式的东西。

基本上,您首先单击工具栏上的房间按钮。工具栏遍历并告诉网格使用“房间位置” Action 监听器。大概删除任何先前正在监听的操作监听器

房间位置 Action 监听器将依次实现左/右单击、拖动等所有有趣的逻辑。

如果您有多个阶段来 build 一个房间(例如,先放置门,然后放置 window ,然后放置活板门); Action 监听器将负责将控制权移交给下一阶段:有点像有限状态机。

因此,首先单击“房间”按钮,添加“放置房间”监听器。拖出您想要房间所在的区域,“放置房间”修改游戏状态,然后将 Action 监听器更改为“放置窗口”监听器。无限循环...直到您完成。

一个非常简单(不可编译)的示例:

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 分离,并通过定义良好的界面来操作它。

(另外,可能有更好的方法来删除鼠标监听器,然后随机删除所有监听器......我有点着急,抱歉)

关于java - java中是否有一个标准的方法来处理鼠标事件的许多不同选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1241633/

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