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

菲尔·安德森

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

Gdx.input.getX()并且Gdx.input.getY()仅限于Windows(而非Mac)上的“我的应用”窗口。

我尝试过Gdx.input.setCatched(true),这确实使它不受限制,但它也将鼠标完全绑定到我的应用程序。因此,直到我Alt + Tab转到其他应用程序,Windows才会获得任何鼠标事件。

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

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

我真的希望对您有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使窗口浮动在桌面上?

如何检测窗口是否“停靠”在桌面上?

不能在桌面上单击鼠标右键

在活动的OS X桌面上保持窗口

打开的窗口在所有桌面上都显示

在Windows 10 UWP应用的桌面上设置窗口大小

是否可以在Windows 8桌面上放置图块?

如何知道Android设备是否平放在桌面上

是否可以在Windows 10桌面上使用Hibernate?

是否可以在远程桌面上运行游戏?

Ubuntu 16.04是否可以在桌面上运行Unity 8?

Windows是否会自动在桌面上加载文件?

Flutter 3 是否支持桌面上的 Webview?

如何确定我的网站/网页在用户桌面上是否处于活动状态

带有Electron的TestCafe:确定应用程序是否在Windows桌面上可见

如何将不可见桌面上的窗口移动到可见窗口?

在Win10桌面上打开新窗口后,如何恢复窗口?

如何设置Xubuntu以在桌面上单击鼠标右键显示“应用程序”菜单?

使用鼠标滚轮在桌面上的Sencha Touch应用程序中滚动

如何通过在桌面上滚动鼠标滚轮来切换Xubuntu中的工作区?

在Unity桌面上单击鼠标右键不执行任何操作-提示?

在远程桌面上使用PyAutoGUI的鼠标单击麻烦

我可以在KDE的两个虚拟桌面上扩展一个窗口吗?

响应弹出窗口在 iOS 和桌面上的工作方式不同

没有显示管理器的桌面上的linux打开窗口

如何在命令行上找到窗口的位置(在桌面上)?

如何仅在一个窗口而不是整个桌面上打印屏幕?

在桌面上/所有窗口上方覆盖半透明图像

如何在桌面上调整“文件夹视图”窗口小部件的大小?