TextButton addLIstener在LibGdx游戏中没有响应?

时间:2014-06-28 13:01:09

标签: android libgdx scene2d

我已经实现了我的MenuScreen: -

private static final String TAG = MenuScreen.class.getName();

    private Stage stage;
    private Skin skinMenuScreen;
    //private Skin skinLibgdx;

    // menu

    private Image imgControlContainer;
    private TextButton btnStartGame;



    // debug
    private final float DEBUG_REBUILD_INTERVAL = 5.0f;
    private boolean debugEnabled = false;
    private float debugRebuildStage;

    public MenuScreen(Game game) {
        super(game);
    }

    @Override
    public void render(float deltaTime) {
        Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        rebuildStage();
        stage.act(deltaTime);
        stage.draw();
    }

    @Override
    public void resize(int width, int height) {
        stage.getViewport().update(width, height);
    }

    @Override
    public void show() {
        stage = new Stage();
        Gdx.input.setInputProcessor(stage);
        rebuildStage();
    }

    @Override
    public void hide() {
        stage.dispose();
        skinMenuScreen.dispose();
        //skinLibgdx.dispose();
    }

    @Override
    public void pause() {

    }

    private void rebuildStage () {
        skinMenuScreen = new Skin(Gdx.files.internal(AppConstant.SKIN_MENU_SCREE_UI), new TextureAtlas(AppConstant.TEXTURE_ATLAS_UI));
        //skinLibgdx = new Skin(Gdx.files.internal(AppConstant.SKIN_LIBGDX_UI), new TextureAtlas(AppConstant.TEXTURE_ATLAS_LIBGDX_UI));

        // build all layers
        Table layerBackground = buildBackgroundLayer();
        Table layerStartControls = buildStartControlsLayer();

        // assemble stage for menu screen
        stage.clear();
        Stack stack = new Stack();
        stage.addActor(stack);
  stack.setSize(AppConstant.VIEWPORT_GUI_WIDTH,AppConstant.VIEWPORT_GUI_HEIGHT);
        stack.add(layerBackground);
        stack.add(layerStartControls);
    }

    private Table buildBackgroundLayer () {
        Table layer = new Table();
        // + Background
        imgBackground = new Image(skinMenuScreen, "welcome");
        layer.add(imgBackground);
        return layer;
    }

    private Table buildStartControlsLayer()
    {
        Table layer = new Table();
        // + Sound
        TextButtonStyle textButtonStyle = new TextButtonStyle();
        BitmapFont bitmapFont = Assets.instance.fonts.bitmapFont;
        textButtonStyle.font = bitmapFont;
        textButtonStyle.fontColor = Color.DARK_GRAY;
        bitmapFont.setScale(1.0F);
        textButtonStyle.up = skinMenuScreen.getDrawable("menu-2");
        textButtonStyle.down = skinMenuScreen.getDrawable("menu-2");
        btnStartGame = new TextButton("Start", textButtonStyle);
        layer.addActor(btnStartGame);
        btnStartGame.setPosition((AppConstant.VIEWPORT_GUI_WIDTH - 230), 100);
        btnStartGame.setSize(150, 50);

            // this listener of textButton is not responding
        btnStartGame.addListener(new ChangeListener() {
            @Override
            public void changed (ChangeEvent event, Actor actor) {
                onStartClicked();
            }
        });

        layer.add(btnStartGame);
        return layer;
    }

// this method is not calling
        private void onStartClicked()
        {
            System.out.println("clicked");
            game.setScreen(new GameScreen(game));
            System.out.println("clicked");
        }

TextButton addListener没有响应..

1 个答案:

答案 0 :(得分:1)

请参阅以下代码段中的评论:

@Override
public void render(float deltaTime) {
    Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    rebuildStage(); //you rebuild your stage inside render method?
    stage.act(deltaTime);
    stage.draw();
}

你不应该在渲染方法中从头开始重建舞台,因为它会破坏你的游戏的帧速率/响应能力。在此处删除rebuildStage();