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

Android TextButton addLIstener在LibGdx游戏中没有响应?,android,libgdx,scene2d,Android,Libgdx,Scene2d,我已经实现了我的菜单屏幕,如下所示:- private static final String TAG = MenuScreen.class.getName(); private Stage stage; private Skin skinMenuScreen; //private Skin skinLibgdx; // menu private Image imgControlContainer; private TextButton bt

我已经实现了我的菜单屏幕,如下所示:-

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没有响应。

请参阅以下代码段中的注释:

@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();
}

您不应该在render方法中从头开始重建舞台,因为它会降低游戏的帧速率/响应速度。删除
重建页面()此处。

我将此方法放在何处?通常在屏幕的create()方法中创建阶段。