听众之间的libGDX变化

时间:2016-02-25 11:28:20

标签: android menu libgdx listener

我有一个基于libGDX的游戏,其中2 Stages用于存储元素。有ImageButtons和Sprites。所有Sprites都应该调用相同的函数,因此它们位于Stage上,而ImageButtons位于另一个Stage上。 我使用MENU按钮在听众之间进行切换。

@Override
public boolean keyDown(int keycode) {
    if ((keycode == Keys.M) || (keycode == Keys.MENU)) {
       // some code
}

已经有两个不同的阶段,有不同的按钮。我在keyDown函数内部更改它们,就像这样。此功能在keyDown内。

ExitButton.addListener(new ClickListener() {
 @Override
   public void clicked(InputEvent event, float x, float y) {
   Gdx.input.setInputProcessor(dialog);
   pause();
   }
});

因此,当调用其他函数时,我将侦听器设置为默认值,而不是主游戏函数。我想把它变成ToggleButton,它可以在听众之间改变。这似乎很容易,但我不能为此目的使用第三种类型的听众。

问题是,在大多数新设备上,这不是任何MENU按钮。

1 个答案:

答案 0 :(得分:1)

新答案:

从您的评论中我假设您想要在两个阶段之间切换,而第三阶段始终处于活动状态。这里的关键是InputMultiplexer可能有更好的方法来做到这一点,但我认为这样的事情应该有效:

public class ButtonTest implements Screen
{
    public class RedCircle extends Actor
    {
         //just a placeholder, your implementation would probably not use this
    }

    public class BlackCircle extends Actor
    {
        //just a placeholder, your implementation would probably not use this
    }

    InputMultiplexer plexer;
    Stage hudStage;
    Stage redStage;
    Stage blackStage;
    public ButtonTest(Skin skin,List<RedCircle> redCircles, List<BlackCircle> blackCircles)
    {
        hudStage = new Stage();
        redStage = new Stage();
        blackStage = new Stage();
        plexer = new InputMultiplexer();
        plexer.addProcessor(hudStage);
        final TextButton switchButton = new TextButton("switch",skin);
        switchButton.addListener(new ClickListener(){
            @Override
            public void clicked(InputEvent event, float x, float y)
            {
                if(switchButton.isChecked())
                {
                    plexer.removeProcessor(redStage);
                    plexer.addProcessor(blackStage);
                }
                else
                {
                    plexer.addProcessor(redStage);
                    plexer.removeProcessor(blackStage);
                }
                switchButton.setText("this button is clicked");
                super.clicked(event, x, y);
            }
        });

        for(RedCircle r : redCircles)
            redStage.addActor(r);

        for(BlackCircle b : blackCircles)
            blackStage.addActor(b);


        switchButton.setPosition(0.1f* Gdx.graphics.getWidth(),0.1f*Gdx.graphics.getHeight());
        hudStage.addActor(switchButton);
    }

    @Override
    public void show()
    {
        Gdx.input.setInputProcessor(plexer);

    }

    @Override
    public void render(float delta)
    {
        Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        hudStage.act();
        hudStage.draw();
        redStage.act();
        redStage.draw();
        blackStage.act();
        blackStage.draw();
    }

    @Override
    public void resize(int width, int height)
    {

    }

    @Override
    public void pause()
    {

    }

    @Override
    public void resume()
    {

    }

    @Override
    public void hide()
    {

    }

    @Override
    public void dispose()
    {
        redStage.dispose();
        blackStage.dispose();
        hudStage.dispose();
    }
}