我不明白InputProcessor
应该如何运作。
我有多个Screens
游戏。我创建了MyInputProcessor
class
implements
InputProcessor。在我的MenuState class
我Gdx.input.setInputProcessor
到该班级的一个实例。
首先,我应该如何访问和设置MainMenu class
中MyInputProcessor
中定义的变量?如果我希望touchDown
方法更改变量,例如。
如果我切换Screens
,是否必须创建新的InputProcessor class
来检查其他触摸事件?我显然不希望它继续检查MainMenu class
的意思。我该怎么用呢?
我是否应该为每个InputProcessor
创建一个全新的Screen
?
我发现这一切都很令人困惑。感谢任何帮助。
答案 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
。所有其他人都不会收到有关此事件的通知
另请注意,InputProcessor
是Actor
,会将事件分发到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
,而是在它出现的那一刻调用。