libgdx中ImageTextButton的闪烁

libgdx中ImageTextButton的闪烁,libgdx,scene2d,Libgdx,Scene2d,我正在使用他们的Scene2d.ui包在libgdx中创建一个存储阶段。我在舞台上看到一些较大版本的按钮出现在较小的按钮后面时,这种奇怪的闪烁现象: 较大的背景按钮忽亮忽灭,而前面的按钮则完全正常。背景的是不可点击的,但是前面的是——同样,它们看起来完全正常 以下是相关代码: private void init(Skin skin) { this.skin = skin; boyTexture = new Texture(Gdx.files.internal("images/ch

我正在使用他们的Scene2d.ui包在libgdx中创建一个存储阶段。我在舞台上看到一些较大版本的按钮出现在较小的按钮后面时,这种奇怪的闪烁现象:

较大的背景按钮忽亮忽灭,而前面的按钮则完全正常。背景的是不可点击的,但是前面的是——同样,它们看起来完全正常

以下是相关代码:

private void init(Skin skin) {
   this.skin = skin;

   boyTexture = new Texture(Gdx.files.internal("images/character.png"));
   catTexture = new Texture(Gdx.files.internal("images/character_cat_girl.png"));
   hornTexture = new Texture(Gdx.files.internal("images/character_horn_girl.png"));
   pinkTexture = new Texture(Gdx.files.internal("images/character_pink_girl.png"));
   queenTexture = new Texture(Gdx.files.internal("images/character_queen_girl.png"));

   // set root table
   table = new Table();
   table.setFillParent(true);
   addActor(table);

   table.add(new Label("Characters: ", skin, "default")).padLeft(10).colspan(2);
   table.row();
   ButtonGroup characterGroup = new ButtonGroup();
   characterGroup.setMaxCheckCount(1);
   Button boyButton = createImageTextButton("Plain Boy", boyTexture);
   table.add(boyButton);
   Button catButton = createImageTextButton("Cat Girl", catTexture);
   table.add(catButton);
   table.row();
   Button hornButton = createImageTextButton("Horn Girl", hornTexture);
   table.add(hornButton);
   Button pinkButton = createImageTextButton("Pink Girl", pinkTexture);
   table.add(pinkButton);
   table.row();
   Button queenButton = createImageTextButton("Queen", queenTexture);
   table.add(queenButton).colspan(2);

   //addAction(Actions.sequence(Actions.alpha(1f), Actions.fadeIn(1)));
}

private Button createImageTextButton(String label, Texture texture) {
   ImageTextButton button = new ImageTextButton(label, skin, "default");
   button.getImage().setDrawable(new SpriteDrawable(new Sprite(texture)));
   return button;
}
起初我以为这和转换动作有关,但正如你们所看到的,我已经把它们注释掉了,现在仍然在发生

我还认为只有ImageTextButton有问题,但我更改了我的
createImageTextButton
方法以返回一个普通的
TextButton
。这仍然有闪烁,但按钮没有在背景中放大-它们似乎在侧面闪烁,但与前景按钮的大小大致相同

以下是以下评论中要求的施工人员:

public Store(Skin skin) {
    super();
    init(skin);
}

public Store(Viewport viewport, Skin skin) {
    super(viewport);
    init(skin);
}

public Store(Viewport viewport, Batch batch, Skin skin) {
    super(viewport, batch);
    init(skin);
}
我在MainGame类中创建阶段时使用了最后一个

public class MainGame extends ApplicationAdapter {

    public static final int MIN_WIDTH = 480;
    public static final int MIN_HEIGHT = 800;

    public static SpriteBatch batch;
    public static GameStage game;
    public static Store store;
    public static Skin skin;
    public static Viewport viewport;
    public static Stage stage;

    @Override
    public void create() {
        viewport = new ExtendViewport(MIN_WIDTH, MIN_HEIGHT);
        batch = new SpriteBatch();
        initSkin();
        game = new GameStage(viewport, batch, skin);
        store = new Store(viewport, batch, skin);
        setStage(game);
    }

    ...

    @Override
    public void render() {
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
    }

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

    ...

    public static void setStage(Stage stage) {
        MainGame.stage = stage;
        Gdx.input.setInputProcessor(stage);
    }
}

你能给我们展示一下
render()
方法吗?在何处/何时调用
init()
方法?我没有重写render()方法,所以它只是默认的Stage.render()方法。在构造函数中调用init方法。我将在上面添加构造函数。在
render()
中调用
stage.draw()
,其中
stage
应该是
游戏
对吗?你在哪里调用
store.stage.draw()
?store扩展了stage,所以我在MainGame中交换了
stage
变量。渲染方法只调用当前阶段的
draw
。很难说是什么问题,显示的代码似乎没问题,我想问题出在其他地方。。。你试过调试你的代码吗?在
render()
中设置一个断点,然后查看
Stage
视口
等。