LibGdx:在不同的类中使用setInputProcessor(stage)

3
我正在使用LibGdx开发安卓游戏;目前有两个菜单屏幕,每个屏幕都有几个按钮,一个是主菜单,一个是游戏结束菜单。我需要在这两个类中使用Gdx.input.setInputProcessor(stage),但是我做不到...只有一个屏幕能够工作。
我在论坛上搜索了很多,只找到了Gdx.input.setInputProcessor(inputMultiplexer)...
InputProcessor inputProcessorOne = new CustomInputProcessorOne();
InputProcessor inputProcessorTwo = new CustomInputProcessorTwo();
InputMultiplexer inputMultiplexer = new InputMultiplexer();
inputMultiplexer.addProcessor(inputProcessorOne);
inputMultiplexer.addProcessor(inputProcessorTwo);
Gdx.input.setInputProcessor(inputMultiplexer);

我遇到了问题,因为它被用来在同一个类中使用多个处理器。

但是我只需要在两个不同的类中使用一个处理器。

目前,我有以下代码……但它不能正常工作:

类1 Gdx.input.setInputProcessor(stageMainMenu);

类2 Gdx.input.setInputProcessor(stageGameOverMenu);

编辑: @MennoGouw 我的问题在于我想将Stage对象放入addProcessor中,而不是InputProcessor。 我不想创建自己的Processor,我会使用ClickListener。 此外,我不需要同时使用两个处理器。实际上,这是两个不同的屏幕。然而,InputProcessor没有清晰的方法。 此外,我不知道应该在哪里构建InputMultiplexer。

我会尽力更清楚一些,我有: MyGame.java仅有一个方法( public void create() { mainMenuScreen = new MainMenu(this); //gameScreen = new MainGame(this); gameOverScreen = new GameOver(this); setScreen(mainMenuScreen);
}
)

还有GameOver.java和MainMenu.java。(这两个屏幕) 如果我将Gdx.input.setInputProcessor(stageName)放在构造函数中,只有其中一个会运行。 否则,在show()方法中,它会崩溃。

感谢您的时间


如果你想让两个处理器同时工作,你应该像你在代码中所做的那样使用 InputMultiplexer。如果你只需要一个处于活动状态,你可以使用 inputMultiplexer.clear 并在任何时候添加一个新的。 - Madmenyo
请在上下文中展示您对setInputProcessor的调用。您应该在各自的show()方法中调用它们。因为这些阶段位于不同的屏幕上,所以您不需要多路复用器。 - Tenfour04
@Tenfour04 但是当我在show()方法中只使用InputProcessor时,它只能工作一次。(我可以启动游戏,但当我在GameOver屏幕上时,如果我点击按钮,它会崩溃) - SkR
你应该澄清你的问题。当你说它不起作用时,每个人都认为你是指它不能接受点击。如果你可以点击按钮,并且它会做些什么,那么它是工作的。错误一定在按钮所做的事情上。任何时候出现崩溃,查看日志中的堆栈跟踪,它会告诉你哪个方法导致了问题。如果你仍然需要帮助,请在这里发布跟踪信息。 - Tenfour04
当我说它不起作用时,没有按钮是活动的。 使用您的解决方案,在show中放置InputProcessor,它有点起作用 :) 我会探索您告诉我的内容!再次感谢 - SkR
@Tenfour04确实,在show()函数中,按钮工作正常。我猜测bug问题(显示屏交替快速显示两个屏幕,然后退出启动器)是由其他原因引起的。我会继续搜索。非常感谢您的帮助,我至少在这里卡了3天...问题已得到解答 :) - SkR
1个回答

2

InputMultiplexer有什么问题吗?它是为你所寻找的而设计的。

你也可以使用以下代码分别在每个阶段中添加处理器:

首先,在你的“init Game”类函数中设置多路复用器:

Gdx.input.setInputProcessor(new InputMultiplexer());

然后检查是否需要添加输入处理器:

InputMultiplexer inputMultiplexer = (InputMultiplexer) Gdx.input.getInputProcessor();
if (!inputMultiplexer.getProcessors().contains(stageMainMenu))
    inputMultiplexer.addProcessor(stageMainMenu);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接