确定鼠标是否在窗外
我需要能够检查鼠标是否在Windows桌面上运行的我的libgdx应用程序的窗口之外。
Gdx.input.getX()
和Gdx.input.getY()
被限制在我的Windows上的应用程序窗口(但不是在Mac上)。
我试过Gdx.input.setCatched(true)
,它确实使它不受约束,但它也将鼠标完全绑定到我的应用程序。 所以Windows没有得到任何鼠标事件,直到我alt +选项卡到另一个应用程序。
我也尝试编写一个InputProcessor,但mouseMoved只能在窗口内被触发。 TouchDragged在外面工作,但当然只有当鼠标按钮被按下并保持在窗口内时才会被触发。
任何帮助不胜感激。
我找到了一种方式,但通过高尔夫来说,这有点儿麻烦。 它利用了lwjgl后端的Mouse.isInsideWindow()方法(感谢Khopa的链接)。
如果有人感兴趣,这里是...
在libgdx核心模块中创建一个接口...
public interface MouseWindowQuery {
public boolean isMouseInsideWindow();
}
将MouseWindowQuery字段添加到您的主AplicationListener类(这将成为许多人为Game扩展的类)并将其保存在某处...
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类(使用main
方法的类)将它传递到主ApplicationListener类。
不管你希望如何,你都可以使用你传入的实例。
如果你有其他模块(例如Android),你必须传递一个null实现(即实现了只返回false的MouseWindowQuery)。
如果你想知道,界面和实现是必要的,以避免从核心引入对桌面的依赖。
唷! 我真的希望能帮助别人!
链接地址: http://www.djcxy.com/p/26849.html上一篇: Determine if mouse outside window
下一篇: Extracting Code of R function to be used in knitr with controled width