如何获取鼠标位置和缓冲区?

Posted

技术标签:

【中文标题】如何获取鼠标位置和缓冲区?【英文标题】:How to get mouse position and buffer? 【发布时间】:2014-10-03 17:41:39 【问题描述】:

如何获取鼠标位置。我试过了:

int mouseX = MouseInfo.getPointerInfo().getLocation().x;
    int mouseY = MouseInfo.getPointerInfo().getLocation().y;

但这适用于整个屏幕。无论如何都要相对于 JPanel/JFrame

如果我只使用每毫秒重新绘制一次的 Graphics JFrame 和 JPanel,我应该有缓冲区吗?或者会好起来吗?

【问题讨论】:

谢谢,我需要帮助,请您花时间回答。会有回报的 + 1 票反对。我猜不是明确的模糊问题和不需要的数据? 不是你的反对者,但考虑减少 cmets 并改进问题。尝试简化它,以便我们可以看到您的问题/问题具体是什么。我已经读了几遍了,还没有完全理解。 好吧,我想我试着问了很多问题,并在错误的编辑上闲逛了一下。 请在每个帖子中坚持一个问题 - 而不是 4 个。这并不是真正可以回答的问题。如果您对其进行编辑,我们可以重新打开它。 【参考方案1】:

如何将 mouseAcionEvent 仅添加到框架中,以便它获取鼠标的 X() 和 Y() 但仅在框架中?

使用MouseListener 而不是MouseInfoMouseListener 将触发与引发它们的组件相关的事件,这意味着您不需要将事件转换到组件空间,因为事件已经在组件上下文中转换。

详情请见How to write a mouse listener

我应该如何每毫秒或以其他方式更新我的游戏 rePaint()?

使用javax.swing.Timer...

详情请见How to use Swing Timers...

我应该使用缓冲区吗?

这将取决于。 Swing 组件已经是双缓冲的,但如果您使用更复杂的计时机制(AKA 游戏循环),您可能会发现它很有用,甚至可以自己滚动。

我个人会从简单开始

如何改进我最初构思代码的方式?是有 10 个循环还是只用 1 个循环来减少延迟。

可能有很多事情,但从更广泛的想法开始......

根据自己的职责分解实体,例如,玩家应该知道它在哪里以及应该如何绘制。它甚至可以根据游戏的当前状态知道它应该如何移动。通过这种方式,您可以创建任意数量的实体,所有实体都有自己的一套独立且易于更新的规则。 设计一种控制器机制,负责接收键盘和鼠标事件并简单地更新游戏模型的当前状态。也就是说,与其说“用户按下‘左’键,将玩家移动到左边”,它只会在游戏模型中引发一个标志,表明“左”状态已被触发(或未触发)并且引擎会,在下一个更新循环中,确保每个实体都知道更改 不要使用魔法或硬编码数字,而是提供某种缩放场景的能力。例如,您可以根据窗口的大小来决定屏幕上显示的内容...

【讨论】:

足够好。谢谢!

以上是关于如何获取鼠标位置和缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章

C#-WinForm-如何获取文本框(TextBox)中鼠标,光标位置

html,js如何获取当前鼠标位置

html,js如何获取当前鼠标位置

如何在某个控件上获取鼠标位置

如何在 JavaFX 中获取鼠标的位置?

MFC如何动态设置当前鼠标位置