Java libGDX-为不同的屏幕使用不同的输入处理器?

Java libGDX-为不同的屏幕使用不同的输入处理器?,java,android,libgdx,Java,Android,Libgdx,我不明白输入处理器应该如何工作 对于一个游戏,我有多个屏幕。我创建了一个MyInputProcessor类,它实现了InputProcessor。在myMenuState类中,我Gdx.input.setInputProcessor到该类的实例 首先,我应该如何访问和设置在MyInputProcessor的main菜单类中定义的变量?例如,如果我希望触地方法更改变量 如果切换屏幕,是否必须创建新的输入处理器类,以检查其他触摸事件?我显然不希望它继续检查main菜单类的内容。我该如何使用它 我应该

我不明白
输入处理器
应该如何工作

对于一个游戏,我有多个
屏幕。我创建了一个
MyInputProcessor
,它实现了
InputProcessor。在my
MenuState类中,我
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
    s
    InputProcessor
    中,当按下“w”、“a”、“s”或“d”时)。 -未处理事件时返回
    false
    (例如在
    Player
    s
    InputProcessor
    中,当按下“Esc”时)。
    inputmultiplexer
    将遍历它的所有
    InputProcessor
    s并向它们发送事件,其中一个返回
    true
    。不会通知所有其他人该事件。

    还要注意的是,
    阶段
    是一个
    输入处理器
    ,它将事件分配给它的
    参与者。因此,如果您想在
    Actor
    s中处理输入,请确保将
    Stage
    设置为当前
    InputProcessor

    谢谢您的回答。我将不得不仔细阅读这篇文章,因为我完全迷路了。现在我有一个类实现了
    InputProcessor
    ,当我改变屏幕检查是否有事情发生时,我创建了一个实例。我不使用stage,因为我以前从未遇到过它们。stage非常好,您只需创建您喜欢的任何角色,并在屏幕的draw方法中调用
    stage.update()
    stage.draw()
    stage.update()
    将对它包含的每个参与者调用方法
    act()
    。因此,当您创建extensing
    Actor
    时,需要覆盖这两种方法。谢谢您的帮助。我将进一步了解stage和actors。输入通常与每个屏幕紧密耦合,因此一种常见模式是让每个屏幕实现InputProcessor,然后在屏幕的show()方法中调用Gdx.Input.setInputProcessor(this)。基本上,是的,您需要定义如何处理每个屏幕上的输入。使用阶段是另一种可能,您现在可以选择忽略它。Stage还实现了InputProcessor。通常,人们使用阶段来处理UI(按钮、输入)。非常感谢您的澄清。输入处理器把我搞糊涂了。非常感谢你的帮助。您是否建议在使用一触式手持设备制作基本手机游戏时使用Stage?我无意中发送了上述评论。继续从“一触式”游戏开始?还是说这太过分了?我没有这方面的经验,应该吗?嗯,
    Stage
    有一些优点,但也有一些缺点。它适用于任何用户界面(如菜单)和小型游戏。Stage已经支持在
    Actor
    s上单击/触摸,而如果没有
    Stage
    ,则必须自己搜索被触摸的对象。另一方面,
    Stage
    使得它对于大型游戏来说非常重要。所以我肯定会使用<代码>阶段<代码> UI,并考虑使用它来做较小的游戏。但是看看libgdxwiki上的文档吧!我一定会的。非常感谢。如果要使用
    阶段
    ,应阅读。其他的经验是不需要的,你们总是在并没有经验的情况下开始新的事情:)但ofc你们应该从小开始,也许在真正开始游戏之前尝试创建菜单?