我需要能够检查鼠标是否在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();
}
将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实现)。
如果您想知道,接口和实现是必需的,以避免从核心引入对桌面的依赖。
!我真的希望对您有所帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句