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 实现)。
如果您想知道,接口和实现是必要的,以避免从核心引入对桌面的依赖。
呸!我真的希望对某人有所帮助!
我需要能够检查鼠标是否在 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 实现)。
如果您想知道,接口和实现是必要的,以避免从核心引入对桌面的依赖。
呸!我真的希望对某人有所帮助!