Java:如何将光标保持在一个区域内

3
对于那些玩过Madness Interactive的人来说,最让人沮丧的事情之一就是光标离开了游戏区域,你会不小心点击到其他地方。这将导致游戏失去焦点并使您的角色在几秒钟内死亡。为了解决这个问题,我想制作一个可以在后台运行的java应用程序,它将保持光标在屏幕内,直到我按下某个键,比如ESC之类的键。
我看到两种实现方式,但我不知道是否可行。
1.创建一个与Madness Interactive渲染区域大小相匹配的AWT框架,并使用它来控制光标。
2.使用一些上下文无关的操作系统调用来保持光标在给定区域内。
方法1的优点:更容易实现框架的调整大小,以便用户可以看到包含区域的形状和位置。
方法1的潜在问题:AWT框架可能需要从游戏所在的浏览器窗口中夺取焦点,使整个解决方案毫无意义。
我的问题是,这两种方法中的任何一种都可行吗?如果不是,是否有可行的选择?
编辑:如果必要,我愿意使用另一种编程语言。
编辑2:我可能会开发一个浏览器插件,但我之前从未进行过这种开发。我会研究一下。

这需要与操作系统无关吗?我可以想象编写一个特定于某个操作系统的应用程序,以全屏运行并将光标事件在某个定义的区域内传递到另一个窗口,但我怀疑这是否可以通过awt完成。 - Ben Taitelbaum
我正在运行Windows,所以不行。它可能只能在Windows上运行...那浏览器插件呢? - Miles
哦,这是一个基于浏览器的游戏?是的,我建议编写一个Greasemonkey脚本来处理它。我会在下面的答案中写出我的想法。 - Ben Taitelbaum
2个回答

2

如果你仍然对从事Java工作感兴趣,这里有一个可能的解决方案。

首先,为了限制光标在某个区域内,你可以使用Java机器人类(Robot class)。

mouseMove(int x, int y);

然后,您可以使用AWT的MouseInfo来获取鼠标光标的位置。
PointerInfo mouseInfo = MouseInfo.getPointerInfo();
Point point = mouseInfo.getLocation();
int x = (int) point.getX();
int y = (int) point.getY();

然后,每当鼠标光标的 xy 值超过某个点时,使用Java Robot类将它们移回。


哦!我以为Robot需要一个父AWT组件,但仔细查看文档后发现我错了!这也是一个有效的答案(我会点赞的,但有人已先回答)...此外,我怎么可能抵挡住“自定义按键绑定”的诱惑呢? - Miles

1
如果这是针对基于浏览器的游戏,请考虑编写一个Greasemonkey脚本,它充当浏览器扩展,可以被过滤以仅在游戏网站上运行。
在最简单的情况下,假设可点击区域为(0,0) - (300,400),那么您可以将以下事件处理程序添加到页面中:
$(document).on('click', function(event) {
  if (event.pageX > 300 || event.pageY > 400) {
    return false;
  }
});

您可以进一步完善您的脚本,以实现以下功能:

  1. 调整浏览器大小,使其最适合游戏
  2. 不再检查点击的绝对 x、y 坐标,而是检查它是否在页面的某个元素内,这样您就不会收到点击
  3. 添加自定义按键绑定,以帮助您玩游戏
  4. 编写一个 JavaScript 机器人,可以自动玩游戏

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接