进入全屏后,libGDX 无法捕捉光标 按照try: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input selector here"))) except: continue # or pass 的建议,从@Tenfour04切换到lwjgl可以解决这个问题!

问题描述

我正在编写一个libGDX游戏。使用 setCursorCatched(boolean) 捕获光标起初效果很好(隐藏光标符号并且不会让我退出窗口)但随后中断:

  • 当我用 F 进入全屏然后用 G 退出后,光标可以四面八方转义
  • 在我使用 F 和 2 个显示器进入全屏后,我还可以逃到我的第二个显示
  • 每帧都使用 setCursorPosition 并不能缓解这个问题。

完整的最小可重现示例(另见 my other question):

package xjcl.extracredits2020

import com.badlogic.gdx.*

class RangeAnxietyGame : ApplicationAdapter() {
    override fun create() {
        Gdx.input.apply { isCursorCatched = true }
    }

    override fun render() {
        if (Gdx.input.isKeypressed(Input.Keys.F))
            Gdx.graphics.setFullscreenMode(Gdx.graphics.displayMode)
        if (Gdx.input.isKeypressed(Input.Keys.G))
            Gdx.graphics.setwindowedMode(1280,720)
        if (Gdx.input.isKeypressed(Input.Keys.ESCAPE))
            Gdx.app.exit()

        Gdx.input.setCursorPosition(Gdx.graphics.width/2,Gdx.graphics.height/2)
    }
}

有没有办法强制光标停留在 libGDX 窗口中?

解决方法

按照try: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"input selector here"))) except: continue # or pass 的建议,从@Tenfour04切换到lwjgl可以解决这个问题!

lwjgl3 中将第一个块更改为第二个块:

build.gradle
api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"

还要调整您的导入(例如在 api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion" 类中):

DesktopLauncher
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;

就我而言,我还需要更新 import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration; 的配置:

DesktopLauncher
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.samples = 8;
config.height = 720;
config.width = 1280;
config.vSyncEnabled = true;
new LwjglApplication(new RangeAnxietyGame(),config);