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");
}
}
这里唯一的问题是光标仍然可以点击游戏中的对象,尽管它是不可见的。一个认为解决这个问题的方法是制作一个标志,设置并用于确定鼠标光标是否不可见。
我在测试我的游戏时遇到了一个问题,该游戏是在我的 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");
}
}
这里唯一的问题是光标仍然可以点击游戏中的对象,尽管它是不可见的。一个认为解决这个问题的方法是制作一个标志,设置并用于确定鼠标光标是否不可见。