libgdx 在桌面上 - 确定鼠标是否在外部 window

libgdx on desktop - Determine if mouse outside window

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

Gdx.input.getX()Gdx.input.getY() 在 Windows 上受限于我的应用程序 window(但在 Mac 上不受限制)。

我试过 Gdx.input.setCatched(true) 这确实让它不受约束,但它也将鼠标完全绑定到我的应用程序。所以 Windows 在我按 alt+tab 到另一个应用程序之前不会收到任何鼠标事件。

我也试过写一个 InputProcessor,但是 mouseMoved 只在 window 内触发。 TouchDragged 在外部工作,但当然只有在按下鼠标按钮并保持在 window.

范围内时才会触发

非常感谢任何帮助。

我找到了一种方法,但天哪,这有点麻烦。它利用了 lwjgl backend Mouse.isInsideWindow() method(感谢 Khopa 的 link)。

如果有人感兴趣,请看这里...

在您的 libgdx 核心模块中创建一个接口...

public interface MouseWindowQuery {

    public boolean isMouseInsideWindow();
}

将 MouseWindowQuery 字段添加到您的主 AplicationListener class(这将是 class 为很多人扩展 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 class(具有 main 方法的那个)传递给您的主 ApplicationListener class。

现在您可以随心所欲地使用传入的实例。

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

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

呸!我真的希望对某人有所帮助!