Java 桌面上的libgdx-确定鼠标是否在窗口外
我需要能够检查鼠标是否在windows桌面上运行的libgdx应用程序的窗口之外Java 桌面上的libgdx-确定鼠标是否在窗口外,java,libgdx,Java,Libgdx,我需要能够检查鼠标是否在windows桌面上运行的libgdx应用程序的窗口之外 Gdx.input.getX()和Gdx.input.getY()被限制在Windows(但不在Mac)上的我的应用程序窗口中 我尝试了Gdx.input.setCatched(true),这确实使它不受约束,但它也将鼠标完全绑定到我的应用程序上。因此,在我将alt+tab切换到其他应用程序之前,Windows不会获取任何鼠标事件 我也尝试过编写一个InputProcessor,但mouseMoved只会在窗口内触
Gdx.input.getX()
和Gdx.input.getY()
被限制在Windows(但不在Mac)上的我的应用程序窗口中
我尝试了Gdx.input.setCatched(true)
,这确实使它不受约束,但它也将鼠标完全绑定到我的应用程序上。因此,在我将alt+tab切换到其他应用程序之前,Windows不会获取任何鼠标事件
我也尝试过编写一个InputProcessor,但mouseMoved只会在窗口内触发。TouchDrawed在外部工作,但当然,只有在窗口内按住鼠标按钮时才会触发
非常感谢您的帮助。我找到了一个方法,但天哪,这是一个有点假的方法。它利用了(感谢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类(使用main
方法的类)将其传递给主ApplicationListener类
现在,您可以随意使用传入的实例
如果您有其他模块(如Android),则必须传入null实现(即刚刚返回false的MouseWindowQuery实现)
如果您想知道,为了避免从核心引入对桌面的依赖,接口和实现是必要的
呸!我真的希望这能帮助别人 我不认为只有libgdx才有可能“在Windows(但不在Mac)上被限制在我的应用程序窗口中。”“你的意思是,在Mac上,当你的鼠标在游戏窗口外但窗口仍然聚焦时,你仍然可以使用上述功能获得鼠标坐标吗?@Crembo:是的。这正是我的意思。刚刚在我的Mac电脑上确认过。它们肯定会返回屏幕外的坐标,但不会返回Windows。您能解释一下这是什么吗?我似乎在libgdxapi中找不到
Mouse
类?它不在标准API中。它在桌面后端jars中。。。精确地说,gdx-backend-lwjgl.jar。这就是为什么你只能从桌面代码调用它。你应该提供一个指向doc->的链接。同样值得一提的是,libgdx的方法确实缺少与这个lwjgl方法的绑定。