繁体   English   中英

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

[英]How to get mouse position and buffer?

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

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

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

如果我只使用每毫秒重新绘制的 Graphics JFrame 和 JPanel,我应该有缓冲区吗? 还是会没事的?

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

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

有关更多详细信息,请参阅如何编写鼠标侦听

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

使用javax.swing.Timer ...

有关更多详细信息,请参阅 如何使用摆动计时器...

我应该使用缓冲区吗?

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

我个人会从简单的开始

我怎样才能改进我首先想到我的代码的方式? 有 10 个循环还是只有 1 个循环可以减少延迟等。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM