我需要能够检查鼠标是否在Windows桌面上运行的libgdx应用程序窗口之外.
Gdx.input.getX()
并Gdx.input.getY()
限制在Windows上的我的应用程序窗口(但不是在Mac上).
我试过Gdx.input.setCatched(true)
它确实使它不受约束,但它也将鼠标完全绑定到我的应用程序.因此,在我将alt + tab添加到其他应用程序之前,Windows不会获得任何鼠标事件.
我也尝试过编写一个InputProcessor,但是mouseMoved只在窗口内被触发.TouchDragged在外面工作,但当然只有在按下鼠标按钮并保持在窗口内时才会触发.
任何帮助非常感谢.
我找到了一种方法,但天哪,这有点废话。它利用了lwjgl 后端 Mouse.isInsideWindow() 方法(感谢 Khopa 提供链接)。
如果有人感兴趣,这里是...
在您的 libgdx 核心模块中创建一个接口...
public interface MouseWindowQuery {
public boolean isMouseInsideWindow();
}
Run Code Online (Sandbox Code Playgroud)
将 MouseWindowQuery 字段添加到您的主 AplicationListener 类(这将是为很多人扩展 Game 的类)并将其保存在某处...
public class SampleApp extends Game
{
private MouseWindowQuery mouseWindowQuery;
public FirstLibgdxApp(MouseWindowQuery mouseWindowQuery) {
this.mouseWindowQuery= mouseWindowQuery;
}
...
}
Run Code Online (Sandbox Code Playgroud)
现在在桌面模块中,您可以按如下方式实现接口...
public class MouseWindowQueryImpl implements MouseWindowQuery {
@Override
public boolean isMouseInsideWindow() {
return Mouse.isInsideWindow();
}
}
Run Code Online (Sandbox Code Playgroud)
最后,将它从 DesktopStarter 类(带有该main
方法的类)传递给您的主 ApplicationListener 类。
现在,您可以随意使用传入的实例。
如果您有其他模块(例如 Android),则必须传入一个 null 实现(即刚刚返回 false 的 MouseWindowQuery 实现)。
如果您想知道,接口和实现是必要的,以避免从核心引入对桌面的依赖。
呼!我真的希望对某人有所帮助!
归档时间: |
|
查看次数: |
653 次 |
最近记录: |