libgdx 使鼠标在几秒钟不活动后重新出现的问题

libgdx problems with make mouse reappear after seconds of inactivity

我在测试我的游戏时遇到了一个问题,该游戏是在我的 macbook pro 笔记本电脑 (OS X el capitan) 上使用 LibGDX 制作的。我的 windows PC 上没有遇到过这个问题。

问题

我的问题是,我做了一些代码,让鼠标在2秒不活动后隐藏起来,如果再次拖动鼠标,它应该会重新出现,直到不再移动,然后2 秒不活动它应该再次隐藏。这在 windows PC 上播放时工作正常,但是当使用我的 macbook 时,它无法正常工作,因为在鼠标被隐藏后(2 秒不活动后),它不会再次出现。

我正在使用 Input class 中的方法 setCursorCatched(true) 来隐藏鼠标,再次使用相同的方法,只是输入错误,使其重新出现.为了检查鼠标是否已相对于其最后已知位置移动,我正在使用方法 getDeltaX()getDeltaY()。我自己检查不活动的方法如下所示。

/* Time for checking mouse inactivity */
private float lastTimeMouseMoved = 0f;
private float elapsedTimeOfInactivity = 0f;

/**
 * Check for mouse inactivity. If mouse is inactive for XX seconds or more, then hide it.
 * If the mouse is moved show it, and then hide it again after XX seconds of inactivity.
 *
 * @param deltaTime the elapsed time between each frame.
 * @param secondsInactive the time of inactivity in seconds
 */
private void hideMouseAfterInactivity(float deltaTime, float secondsInactive) {
    /* If mouse has been moved */
    if (Gdx.input.getDeltaX() != 0 || Gdx.input.getDeltaY() != 0) {
        /* Show the mouse cursor */
        Gdx.input.setCursorCatched(false);

        /* Keep track of the last known time which the mouse was moved. */
        lastTimeMouseMoved = deltaTime;
        elapsedTimeOfInactivity = lastTimeMouseMoved;
    } else {
        /* check if the time of inactivity is XX seconds or more */
        if (elapsedTimeOfInactivity >= lastTimeMouseMoved + secondsInactive) {
            /* Hide the mouse cursor */
            Gdx.input.setCursorCatched(true);
        } else {
            /* update the elapsed time of inactivity */
            elapsedTimeOfInactivity += deltaTime;
        }
    }
}

我希望有人能告诉我哪里出了问题...我在使用 setCursorCatched(true) 后全屏玩游戏时也遇到了鼠标显示问题。提前致谢。

虽然这不是解决问题的最佳方法,但它确实可以。我所做的是创建一个 1x1 像素的透明图像,然后我没有使用 setCursorCatched(boolean catched) 方法来使鼠标可见和不可见,而是在我的主游戏 class 中创建了以下方法,所以我可以在我的所有其他游戏屏幕中访问它。

//Remember to dispose these on application exit.
private Pixmap normalMouseCursor = new Pixmap(Gdx.files.internal("normal-cursor.png"));
private Pixmap transparentMouseCursor = new Pixmap(Gdx.files.internal("transparent-cursor.png"));

/**
 * Set the mouse cursor to either the normal cursor image or a transparent one if hidden.
 *
 * @param shouldHide true if the mouse should be invisble
 */
public void setMouseCursor(boolean shouldHide) {
    if (shouldHide) {
        Gdx.graphics.setCursor(Gdx.graphics.newCursor(transparentMouseCursor, 0, 0));
        Gdx.app.debug(TAG, "Mouse Cursor is invisible");
    } else {
        Gdx.graphics.setCursor(Gdx.graphics.newCursor(normalMouseCursor, 0, 0));
        Gdx.app.debug(TAG, "Mouse Cursor is visible");
    }
}

这里唯一的问题是光标仍然可以点击游戏中的对象,尽管它是不可见的。一个认为解决这个问题的方法是制作一个标志,设置并用于确定鼠标光标是否不可见。