Java libGDX-为不同的屏幕使用不同的输入处理器?
我不明白Java libGDX-为不同的屏幕使用不同的输入处理器?,java,android,libgdx,Java,Android,Libgdx,我不明白输入处理器应该如何工作 对于一个游戏,我有多个屏幕。我创建了一个MyInputProcessor类,它实现了InputProcessor。在myMenuState类中,我Gdx.input.setInputProcessor到该类的实例 首先,我应该如何访问和设置在MyInputProcessor的main菜单类中定义的变量?例如,如果我希望触地方法更改变量 如果切换屏幕,是否必须创建新的输入处理器类,以检查其他触摸事件?我显然不希望它继续检查main菜单类的内容。我该如何使用它 我应该
输入处理器
应该如何工作
对于一个游戏,我有多个屏幕。我创建了一个MyInputProcessor
类
,它实现了InputProcessor。在myMenuState类中,我Gdx.input.setInputProcessor
到该类的实例
首先,我应该如何访问和设置在MyInputProcessor
的main菜单类中定义的变量?例如,如果我希望触地
方法更改变量
如果切换屏幕
,是否必须创建新的输入处理器类
,以检查其他触摸事件?我显然不希望它继续检查main菜单类的内容。我该如何使用它
我应该为每个屏幕创建一个全新的输入处理器吗
我觉得这一切都很混乱。非常感谢您的帮助。您是否正在使用阶段
作为输入处理器
?
如果是,我假设每个屏幕都有单独的阶段
实例
你应该在舞台上添加演员
,让他们处理输入。
如果要组合更多输入处理器,请执行以下操作:
InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor(yourCustomInputProcessor);
multiplexer.addProcessor(stage)
Gdx.input.setInputProcessor(multiplexer);
编辑
不要从主屏幕的构造函数调用Gdx.input.setInputProcessor
,而是在它出现时调用。是的,通常为每个屏幕创建一个InputProcessor
,或者更好地为每个需要处理输入的对象创建一个InputProcessor
。此对象可以是屏幕
,但也可以是播放器
收件人。
因此,每个需要获得输入通知的对象都应该实现InputProcessor
,并处理相关的输入。
还要确保将InputProcessor
设置为当前的活动处理器(使用Gdx.input.setInputProcessor
)。
例如,屏幕
s可以在show
方法中将自身设置为当前的输入处理器
(并最终在隐藏
中注销自身)。
如果您想同时使用多个输入处理器
(例如在游戏屏幕
,其中播放器
使用“w,a,s,d”控制,但您想在“Esc”上显示一个暂停
),只需使用输入多路复用器
,并在该多路复用器上注册每个输入处理器
。
如果使用InputMultiplexer
,请确保注意InputProcessor
-方法的返回值:
-如果处理器处理了事件,则返回true
(例如在Player
sInputProcessor
中,当按下“w”、“a”、“s”或“d”时)。
-未处理事件时返回false
(例如在Player
sInputProcessor
中,当按下“Esc”时)。
inputmultiplexer
将遍历它的所有InputProcessor
s并向它们发送事件,其中一个返回true
。不会通知所有其他人该事件。
还要注意的是,阶段
是一个输入处理器
,它将事件分配给它的参与者。因此,如果您想在Actor
s中处理输入,请确保将Stage
设置为当前InputProcessor
谢谢您的回答。我将不得不仔细阅读这篇文章,因为我完全迷路了。现在我有一个类实现了InputProcessor
,当我改变屏幕检查是否有事情发生时,我创建了一个实例。我不使用stage,因为我以前从未遇到过它们。stage非常好,您只需创建您喜欢的任何角色,并在屏幕的draw方法中调用stage.update()
和stage.draw()
stage.update()
将对它包含的每个参与者调用方法act()
。因此,当您创建extensingActor
时,需要覆盖这两种方法。谢谢您的帮助。我将进一步了解stage和actors。输入通常与每个屏幕紧密耦合,因此一种常见模式是让每个屏幕实现InputProcessor,然后在屏幕的show()方法中调用Gdx.Input.setInputProcessor(this)。基本上,是的,您需要定义如何处理每个屏幕上的输入。使用阶段是另一种可能,您现在可以选择忽略它。Stage还实现了InputProcessor。通常,人们使用阶段来处理UI(按钮、输入)。非常感谢您的澄清。输入处理器把我搞糊涂了。非常感谢你的帮助。您是否建议在使用一触式手持设备制作基本手机游戏时使用Stage?我无意中发送了上述评论。继续从“一触式”游戏开始?还是说这太过分了?我没有这方面的经验,应该吗?嗯,Stage
有一些优点,但也有一些缺点。它适用于任何用户界面(如菜单)和小型游戏。Stage已经支持在Actor
s上单击/触摸,而如果没有Stage
,则必须自己搜索被触摸的对象。另一方面,Stage
使得它对于大型游戏来说非常重要。所以我肯定会使用<代码>阶段<代码> UI,并考虑使用它来做较小的游戏。但是看看libgdxwiki上的文档吧!我一定会的。非常感谢。如果要使用阶段
,应阅读。其他的经验是不需要的,你们总是在并没有经验的情况下开始新的事情:)但ofc你们应该从小开始,也许在真正开始游戏之前尝试创建菜单?