确定鼠标是否在窗外

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

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

我试过Gdx.input.setCatched(true) ,它确实使它不受约束,但它也将鼠标完全绑定到我的应用程序。 所以Windows没有得到任何鼠标事件,直到我alt +选项卡到另一个应用程序。

我也尝试编写一个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)。

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

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

链接地址: http://www.djcxy.com/p/26849.html

上一篇: Determine if mouse outside window

下一篇: Extracting Code of R function to be used in knitr with controled width