桌面上的libgdx - 确定鼠标是否在窗口外

时间:2015-06-02 10:25:29

标签: java libgdx

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

Gdx.input.getX()Gdx.input.getY()被限制在Windows上的应用程序窗口中(但不在Mac上)。

我尝试Gdx.input.setCatched(true)确实让它不受约束,但它也将鼠标完全绑定到我的应用程序。因此,在我将alt + tab添加到其他应用程序之前,Windows无法获取任何鼠标事件。

我也尝试过编写一个InputProcessor,但是mouseMoved只会在窗口内被触发。 TouchDragged在外面工作,但当然只有在按下并保持在窗口内时才会触发。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我找到了一种方法,但通过它,它有点像faff。它利用lwjgl backend Mouse.isInsideWindow() method(感谢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类的主ApplicationListener类(使用main方法的类)。

现在您可以使用您希望传入的实例。

如果您有其他模块(例如Android),则必须传入null实现(即只返回false的MouseWindowQuery实现)。

如果您想知道,接口和实现是必要的,以避免从核心引入对桌面的依赖。

唷!我真的希望能帮助别人!