【问题标题】:Libgdx scene2d inputprocessor not working?Libgdx scene2d 输入处理器不工作?
【发布时间】:2015-09-10 09:42:07
【问题描述】:

所以基本上我在这里想要实现的目标非常简单。使用菜单屏幕加载游戏。单击播放按钮,移动到“播放屏幕”,角色死亡,单击“​​主页按钮”返回菜单屏幕。但是,当我在角色死亡后尝试点击“播放按钮”时,似乎根本没有记录点击次数。请记住,在第一次尝试(首次打开应用程序时)我的主菜单类中的按钮是可点击的。但是,当我尝试使用如下所示的方法 updateGOSButtons() 转换回相同的主菜单类后,按钮变得不可点击。

菜单屏幕类

public void show() {
        //init table and stuff
        buttonPlay.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                buttonClicked.play();
                game.setScreen(new GameScreen(game));
                dispose();
            }
        });

        buttonRate.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                buttonClicked.play();
                System.out.println("Nothing happens Yet");
            }
        });
        Gdx.input.setInputProcessor(stage);
}

播放屏幕类

public void updateGOSButtons() {
        if (gos.isGoButtonClicked()) {
            gameOver.stop();
            backgroundMusic.play();

            gameState = GameState.START;

            dispose();
            game.setScreen(new GameScreen(game));
        }

        if (gos.isHomeButtonClicked()) {
            gameOver.stop();
            backgroundMusic.play();

            gameState = GameState.START;

            dispose();
            game.setScreen(new MainMenuScreen(game));
        }

        Gdx.input.setInputProcessor(gos.getStage());
    }

【问题讨论】:

  • 您正在创建一个新阶段吗?大多数情况下,当我的舞台、按钮或任何演员不工作时,这是因为我在分配它或添加了侦听器或其他东西之后在其中创建了一个新对象。

标签: java android libgdx scene2d


【解决方案1】:

我相信你在 GameScreen 的渲染中调用了 updateGOSButtons 方法。我认为问题可能在于将屏幕设置为 MainScreen

    if (gos.isHomeButtonClicked())
    {
        ...

    Gdx.input.setInputProcessor(gos.getStage());

被再次调用并“覆盖”

    Gdx.input.setInputProcessor(stage);

来自 MainMenu 屏幕,仅调用一次(在 show 方法中,因此在屏幕开头)。

解决方案是将游戏屏幕中 inputProcessor 的设置移动到 show() 方法中(这样它只会被调用一次)。

如果您出于某种原因需要多个阶段作为 inputProcessor 只需使用 InputMultiplexer - 您可以在此处阅读如何使用它:

https://github.com/libgdx/libgdx/wiki/Event-handling

【讨论】:

  • 我只想感谢您的宝贵时间,这是一个绝对完美的答案。我尝试在我的 updateGOS 方法中添加一个布尔变量,以确定它是否已经被单击过一次,如果是,则停止更新输入处理器,但是在调试时我发现在屏幕更改为 MainScreen 后再次调用该方法,因此再次将我的布尔变量设置为 false。我不确定我目前的做法是否正确,但我只需将输入处理器添加到我的 MainScreen 的渲染方法即可解决它。我想知道这是否是“低效”的做法
猜你喜欢
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 2023-04-10
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多