我需要能够检查鼠标是否在Windows桌面上运行的libgdx应用程序窗口之外。
Gdx.input.getX()
和Gdx.input.getY()
被限制在Windows上的应用程序窗口中(但不在Mac上)。
我尝试Gdx.input.setCatched(true)
确实让它不受约束,但它也将鼠标完全绑定到我的应用程序。因此,在我将alt + tab添加到其他应用程序之前,Windows无法获取任何鼠标事件。
我也尝试过编写一个InputProcessor,但是mouseMoved只会在窗口内被触发。 TouchDragged在外面工作,但当然只有在按下并保持在窗口内时才会触发。
非常感谢任何帮助。
答案 0 :(得分:3)
我找到了一种方法,但通过它,它有点像faff。它利用lwjgl backend Mouse.isInsideWindow() method(感谢Khopa的链接)。
如果有人感兴趣,这里就是......
在libgdx核心模块中创建一个接口......
public interface MouseWindowQuery {
public boolean isMouseInsideWindow();
}
将一个MouseWindowQuery字段添加到您的主AplicationListener类中(这将是为许多人扩展游戏的类)并将其保存在某个地方...
public class SampleApp extends Game
{
private MouseWindowQuery mouseWindowQuery;
public FirstLibgdxApp(MouseWindowQuery mouseWindowQuery) {
this.mouseWindowQuery= mouseWindowQuery;
}
...
}
现在在桌面模块中,您可以按如下方式实现界面......
public class MouseWindowQueryImpl implements MouseWindowQuery {
@Override
public boolean isMouseInsideWindow() {
return Mouse.isInsideWindow();
}
}
最后,将其传递到DesktopStarter类的主ApplicationListener类(使用main
方法的类)。
现在您可以使用您希望传入的实例。
如果您有其他模块(例如Android),则必须传入null实现(即只返回false的MouseWindowQuery实现)。
如果您想知道,接口和实现是必要的,以避免从核心引入对桌面的依赖。
唷!我真的希望能帮助别人!