2012-12-12 52 views
3

对于那些玩过疯狂互动游戏的玩家来说,最令人沮丧的事情之一是当光标离开游戏区域时,您不小心点击了它。这会导致游戏离​​焦,你的角色会在几秒钟内死亡。为了解决这个问题,我想制作一个Java应用程序,我可以在后台运行这个应用程序,将光标放在屏幕中,直到按ESC或其他东西。Java:将光标放在某个区域

我看到了两种实现方法,但我不知道它们是否可行。

  1. 制作一个与疯狂互动渲染区大小相匹配的AWT框架,并使用它来控制游标。
  2. 使用一些超出上下文的操作系统调用来将光标保持在给定区域中。

方法#1的优点:更容易实现框架的大小调整,以便用户可以看到封闭区域的形状和位置。

方法#1的潜在问题:AWT框架可能需要从游戏运行的浏览器窗口窃取焦点,使得整个解决方案毫无意义。

我的问题是,这些方法是否可行?如果没有,是否有可行的选择?

编辑:我愿意使用其他编程语言,如果有必要。编辑2:我可能会为此开发一个浏览器插件,但我之前从未做过这种开发。我会研究它。

+0

这是否需要操作系统不可知?我可以想象编写一个运行全屏的操作系统特定的应用程序,并将某些定义区域内的光标事件传递到另一个窗口,但我怀疑这可以通过awt完成。 –

+0

我正在运行窗口,所以没有。它可以是仅限Windows ...浏览器插件怎么样? – Miles

+0

哦,这是一款基于浏览器的游戏?是的,我建议编写一个grepmonkey脚本来处理它。我会在下面的答案中写下我的想法。 –

回答

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. 添加自定义键绑定在游戏UMM ..帮你
  4. 编写JavaScript机器人如果你在Java中的工作仍然有兴趣,可以玩游戏本身
+0

非常感谢!我喜欢第3部分和第4部分:) – Miles

2

,这里有一个可能的为你解决。

首先,为了限制区域内的游标,您可以使用Java Robot类。

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类。

+0

哦!我以为机器人需要一个父AWT组件,但经过对文档的进一步检查,看起来我错了!这也是一个有效的答案(我会对它进行投票,但其他人会先回答)...此外,我怎么可能抵制添加“自定义键盘绑定”的诱惑? – Miles