我在处理来自多个使用 keyDown/keyUp 的独立 InputAdapter 的输入时遇到问题。
Gdx.input.setInputProcessor( new InputMultiplexer( keyboardController1, keyboardController2, keyboardController3));
只有第一个有效,其他的无效;在本例中为 keyboardController1。
我猜它与 keyDown()
方法末尾的 return true;
有关。
我尝试阅读文档、教程、帖子等但是,我仍然无法很好地理解返回值的含义和作用,也无法很好地理解我应该将其设置为哪个 boolean 值。
我的问题:
keyDown/keyUp等的boolean返回值是什么意思?
最佳答案
您返回的 boolean
值应该是:
- true,如果此
InputProcessor
或InputAdapter
处理了输入。 - false,如果它没有处理输入。
想想一款游戏,其中 2 名玩家在同一台电脑上玩(例如分屏)。
一名玩家使用“WASD”控制,第二名玩家使用“箭头键”控制。因此,第一个玩家的 InputProcessor
仅处理“WASD”键,而第二个玩家的 InputProcessor
仅处理“方向键”。
如果按下的键是“W、A、S 或 D”,第一个 InputProcessor
会处理它,您不需要将它交给第二个。所以你返回 true
。如果按下的键是“箭头键”之一,第一个 InputProcessor
将不会处理它,因此您返回 false。
多路复用器得到这个返回值并说:
- 返回为
true
,输入已处理,将其丢弃。 - 返回为
false
,输入未处理,将其交给下一个处理器。
希望你明白我在说什么:P
编辑keyDown(int keyCode)
、keyUp(int keyCode)
等方法都有int keyCode
,它告诉你按下了哪个键。通常你使用一个开关来知道按下了哪个键。这个开关看起来像这样:
switch(keyCode) {
case Keys.W:
// Handle the event for "W" key pressed
case Keys.A:
// Handle the event for "A" key pressed
// Other cases
default:
return false;
}
return true;
对于评论中的其他问题:如果 1 个玩家由 W、A、S、D 控制,他不需要处理其他键的输入。所以他返回 false,如果他没有处理输入,否则返回 true。
第二个玩家由方向键控制,因此他不需要处理其他键,如 W、A、S 或 D 键。
如果您有多个 InputProcessor
,它们必须处理相同的键,您必须返回 false,以便 InputMultiplexer
将事件传递给每个 InputProcessor
.
关于java - LIBGDX:InputAdapter 的 keyDown、keyUp 等返回值的含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779253/