我在处理来自多个使用keyDown/keyUp的独立InputAdapters的输入时遇到了问题。
Gdx.input.setInputProcessor( new InputMultiplexer( keyboardController1, keyboardController2, keyboardController3));
只有第一个在线运行,而其他的不工作;在本例中,是keyboardController1。我猜这与keyDown()
方法末尾的keyDown()
有关。我试着阅读了文档、教程、post...etc,但是,我仍然无法很好地理解返回值的含义和作用,也无法理解应该将其设置为哪个布尔值。我的问题是:keyDown/keyUp(以此类推)的布尔返回值的含义是什么?
发布于 2014-04-01 07:27:49
您返回的boolean
值应该是:
InputProcessor
或InputAdapter
处理输入,则为true。想想一个游戏,其中两个玩家在同一台电脑上玩(例如,分裂屏幕)。
一个玩家用"WASD“控制,另一个用”箭头键“控制。因此,第一个播放器的InputProcessor
只处理"WASD“键,而第二个只处理”箭头键“的InputProcessor
。
如果按下的键是"W,A,S或D",则第一个InputProcessor
处理它,您不需要将它交给第二个。所以你返回true
。如果按下的键是“箭头键”之一,则第一个InputProcessor
将无法处理它,因此您将返回false。
复用器得到这个返回值,并说:
true
,输入已被处理,将其丢弃。false
,输入未处理,将其交给下一个处理器。希望你能明白我说的是什么
编辑:,keyDown(int keyCode)
,keyUp(int keyCode)
和其他方法都有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;
对于你在评论中的另一个问题:如果一个玩家被W,A,S,D控制,他不需要处理其他键的输入。因此,如果不处理输入,则返回false,否则返回true。第二个玩家被箭头键控制,所以他不需要处理其他的键,如W,A,S或D键。如果有一个以上的InputProcessor
(必须处理相同的键),则必须返回false,以便InputMultiplexer
将事件传递给每个InputProcessor
。
发布于 2014-04-01 07:26:00
如果你在游戏中有一个以上的输入处理器,并且你希望在你的情况被其中一个处理器处理后,它不应该去其他处理器,而不是返回真;
否则,如果你想让它去其他处理器,也比你应该返回假。
假设你有两个输入处理器,并且都有一个按键。如果你有一个条件,只有一个应该执行返回真从两个键下降,其他返回假。
发布于 2014-04-01 07:26:30
您自己链接的文档如下所示
返回:是否处理了输入
返回true意味着事件是由该处理程序处理的,并且它不会被触发到随后的任何其他处理程序。
如果您希望其他处理器也能接收事件并让它们也处理它,那么您的第一个处理程序需要return false
。
https://stackoverflow.com/questions/22779253
复制相似问题