2013-05-18 2 views
3

Мое фоновое изображение не отображается, оно отображается как белый квадрат в углу, подобном этому.Фон LIBGDX для главного меню отображается белым

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

Изображение показывает вверх.

ответ

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