主菜单的LIBGDX背景显示为白色

时间:2013-05-18 16:52:24

标签: java android desktop libgdx 2d-games

我的背景图片没有显示出来,它在角落里显示为白色方块。

https://dl.dropboxusercontent.com/u/45938379/menu.png

我需要知道如何解决这个问题,我的演员们正如你所看到的那样在幕后展示。

这是我的代码

public class MainMenu implements Screen {

CrazyZombies game;
Stage stage;
TextureAtlas atlas;
Skin skin;
SpriteBatch batch;
Button play, option, quit, custom, store;

TextureRegion backGround;

public MainMenu(CrazyZombies game) {
    this.game = game;
}

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0.09f, 0.28f, 0.2f, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    stage.act(delta);

    batch.begin();
    stage.draw();
    drawBackGround();
    batch.end();
}

@Override
public void resize(int width, int height) {
    if (stage == null)
        stage = new Stage(width, height, true);
    stage.clear();

    Gdx.input.setInputProcessor(stage);

    /**
     * quit Button
     */

    TextButtonStyle styleQuit = new TextButtonStyle();
    styleQuit.up = skin.getDrawable("8layer");
    styleQuit.down = skin.getDrawable("8layer");

    quit = new Button(styleQuit);
    quit.setWidth(854);
    quit.setHeight(480);
    quit.setX(Gdx.graphics.getWidth() / 2 - quit.getWidth() / 2);
    quit.setY(Gdx.graphics.getHeight() / 2 - quit.getHeight() / 2);

    quit.addListener(new InputListener() {
        public boolean touchDown(InputEvent event, float x, float y,
                int pointer, int button) {
            return true;
        }

        public void touchUp(InputEvent event, float x, float y,
                int pointer, int button) {

        }
    });

    /**
     * End quit Button
     */

     /**
      * store Button
      */

    TextButtonStyle styleStore = new TextButtonStyle();
    styleStore.up = skin.getDrawable("9layer");
    styleStore.down = skin.getDrawable("9layer");

    store = new Button(styleStore);
    store.setWidth(854);
    store.setHeight(480);
    store.setX(Gdx.graphics.getWidth() / 2 - store.getWidth() / 2);
    store.setY(Gdx.graphics.getHeight() / 2 - store.getHeight() / 2);

    store.addListener(new InputListener() {
        public boolean touchDown(InputEvent event, float x, float y,
                int pointer, int button) {
            return true;
        }

        public void touchUp(InputEvent event, float x, float y,
                int pointer, int button) {
            game.setScreen(new StoreScreen(game));
        }
    });

    /**
     * End store Button
     */

     /**
      * customs Button
      */

    TextButtonStyle styleCustom = new TextButtonStyle();
    styleCustom.up = skin.getDrawable("10layer");
    styleCustom.down = skin.getDrawable("10layer");

    custom = new Button(styleCustom);
    custom.setWidth(854);
    custom.setHeight(480);
    custom.setX(Gdx.graphics.getWidth() / 2 - custom.getWidth() / 2);
    custom.setY(Gdx.graphics.getHeight() / 2 - custom.getHeight() / 2);

    custom.addListener(new InputListener() {
        public boolean touchDown(InputEvent event, float x, float y,
                int pointer, int button) {
            return true;
        }

        public void touchUp(InputEvent event, float x, float y,
                int pointer, int button) {
            game.setScreen(new CustomScreen(game));
        }
    });

    /**
     * End customs Button
     */

     /**
      * Options Button
      */

    TextButtonStyle styleOptions = new TextButtonStyle();
    styleOptions.up = skin.getDrawable("11layer");
    styleOptions.down = skin.getDrawable("11layer");

    option = new Button(styleOptions);
    option.setWidth(854);
    option.setHeight(480);
    custom.setX(Gdx.graphics.getWidth() / 2 - custom.getWidth() / 2);
    custom.setY(Gdx.graphics.getHeight() / 2 - custom.getHeight() / 2);

    option.addListener(new InputListener() {
        public boolean touchDown(InputEvent event, float x, float y,
                int pointer, int button) {
            return true;
        }

        public void touchUp(InputEvent event, float x, float y,
                int pointer, int button) {
            game.setScreen(new OptionScreen(game));
        }
    });

    /**
     * End Options Button
     */

     /**
      * Play Button
      */

    TextButtonStyle stylePlay = new TextButtonStyle();
    stylePlay.up = skin.getDrawable("7layer");
    stylePlay.down = skin.getDrawable("7layer");

    play = new Button(stylePlay);
    play.setWidth(854);
    play.setHeight(480);
    play.setX(Gdx.graphics.getWidth() / 2 - play.getWidth() / 2);
    play.setY(Gdx.graphics.getHeight() / 2 - play.getHeight() / 2);

    play.addListener(new InputListener() {
        public boolean touchDown(InputEvent event, float x, float y,
                int pointer, int button) {
            return true;
        }

        public void touchUp(InputEvent event, float x, float y,
                int pointer, int button) {
            game.setScreen(new GameScreen(game));
        }
    });

    /**
     * End Play Button
     */
    stage.addActor(play);
    stage.addActor(option);
    stage.addActor(store);
    stage.addActor(custom);
    stage.addActor(quit);

}

@Override
public void show() {
    Audio.playMusic(true);
    batch = new SpriteBatch();
    atlas = new TextureAtlas("data/mainmenu/mainmenu.pack");
    skin = new Skin();
    skin.addRegions(atlas);

    backGround = atlas.findRegion("background");
    backGround.getRegionHeight();
    backGround.getRegionWidth();
}

public void drawBackGround() {
    float w = 854;
    float h = 480;
    float y = 0;
    float x = 0;
    batch.draw(backGround, x, y, w, h);
}

@Override
public void hide() {
    dispose();
}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void dispose() {
    batch.dispose();
    skin.dispose();
    atlas.dispose();
    stage.dispose();
}

}

我还注意到,如果我摆脱

stage.draw();

图像显示。

1 个答案:

答案 0 :(得分:3)

stage.draw()batch.begin()中取出batch.end()。舞台确实拥有它自己的Spritebatch,所以你现在确实拥有了一些。我认为这确实会引起麻烦。所以最好的方法是:

@Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0.09f, 0.28f, 0.2f, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        stage.act(delta);
        stage.draw();


        batch.begin();
        drawBackGround();
        batch.end();
    }

我建议你把你的背景放在舞台上。 Image也是一名演员,因此您可以将其添加到您的舞台,而不是致电.toBack()Back)将其置于后台。
Libgdx Image