libGDX - 为不同的屏幕使用不同的InputProcessors?

时间:2016-10-12 19:50:44

标签: java android libgdx

我不明白InputProcessor应该如何运作。

我有多个Screens游戏。我创建了MyInputProcessor class implements InputProcessor。在我的MenuState classGdx.input.setInputProcessor到该班级的一个实例。

  1. 首先,我应该如何访问和设置MainMenu classMyInputProcessor中定义的变量?如果我希望touchDown方法更改变量,例如。

  2. 如果我切换Screens,是否必须创建新的InputProcessor class来检查其他触摸事件?我显然不希望它继续检查MainMenu class的意思。我该怎么用呢?

  3. 我是否应该为每个InputProcessor创建一个全新的Screen

  4. 我发现这一切都很令人困惑。感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

是的,通常你会为每个InputProcessor创建一个Screen,或者对每个需要处理输入的对象更好。此对象可以是Screen,但可以是Player 因此,需要获得任何输入通知的每个对象都应实现InputProcessor并处理相关输入 另外,请务必将InputProcessor设置为当前活动的Gdx.input.setInputProcessor(使用Screen) 例如,InputProcessor可以将自己设置为show方法中的当前hide(并最终在InputProcessor中取消注册)。 如果您想一次使用多个GameScreen(例如在Player中,PauseMenu使用“w,a,s,d”进行控制,但您想显示“Esc”上的InputMultiplexer,只需使用InputProcessor并在该多路复用器上注册每个InputMultiplexer
如果您使用InputProcessor,请务必注意true - 方法的返回值:
- 如果处理者处理了事件,则返回Player(例如在InputProcessor s false中,当按下“w”,“a”,“s”或“d”时。 - 当您未处理事件时(例如在Player s InputProcessor中,当按下“Esc”时)返回InputMulitplexer
InputProcessor将遍历所有true并向其发送事件,unitl其中一个返回Stage。所有其他人都不会收到有关此事件的通知 另请注意,InputProcessorActor,会将事件分发到Actor。因此,如果您要处理Stage中的输入,请务必将InputProcessor设置为当前.tmLanguage

答案 1 :(得分:0)

您是否使用Stage作为InputProcessor? 如果是,我假设您为每个屏幕都有单独的Stage实例。

您应该将Actors添加到舞台并让他们处理输入。 如果要组合更多输入处理器,请执行以下操作:

InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor(yourCustomInputProcessor);
multiplexer.addProcessor(stage)
Gdx.input.setInputProcessor(multiplexer);

修改 不要从主屏幕的构造函数中调用Gdx.input.setInputProcessor,而是在它出现的那一刻调用。