Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 桌面上的libgdx-确定鼠标是否在窗口外_Java_Libgdx - Fatal编程技术网

Java 桌面上的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只会在窗口内触

我需要能够检查鼠标是否在windows桌面上运行的libgdx应用程序的窗口之外


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方法的绑定。