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

时间:2014-08-10 23:37:30

标签: java awt mouseevent buffer

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

有关详细信息,请参阅How to write a mouse listener

  

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

使用javax.swing.Timer ...

有关详细信息,请参阅How to use Swing Timers ...

  

我应该使用缓冲区吗?

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

我个人会开始简单的

  

如何才能改善我首先考虑代码的方式?是正确的有10个循环还是只有1个减少滞后等。

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

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