2016-08-15 82 views
0

我有一個加載我所有的遊戲關卡載入畫面和當前級別傳遞到播放畫面展示和渲染方法

玩家應該在播放按鈕,點擊菜單屏幕上移動到這個加載屏幕,但是當他點擊它需要很長時間,因爲我有多個級別

所以我試圖通過移動菜單屏幕的屏幕截圖遠離屏幕和移動加載屏幕,而不是它,但我有同樣的問題,因爲show方法之前調用一次()

我的問題是:

如何在動畫完成之後加載關卡?換句話說,如何在等待完成之後,在show中做一些事情(如果我將loadLevels放入渲染中,則無法在每一幀中加載關卡)。

這裏是我的代碼:

public class LoadingScreen extends BaseScreen { 

    SpriteBatch batch; 
    TweenManager manager; 
    Sprite loading; 
    Level lvl; 
    int currentLevel; 

    public LoadingScreen(GameMain gameMain, Sprite prvScreenSprite, int currentLevel) { 
     super(gameMain, prvScreenSprite); 
     this.currentLevel = currentLevel; 
    } 

    @Override 
    public void show() { 
     batch = new SpriteBatch(); 
     manager = new TweenManager(); 
     Tween.registerAccessor(Sprite.class, new SpriteAccessor()); 
     loading = Assets.initSprite(new Texture(Gdx.files.internal("loading.png"))); 
     loading.setBounds(0, 0, Constants.WIDTH, Constants.HEIGHT); 

     //screen animation 
     if (prvScreenSprite != null) { 
      Timeline.createParallel().beginParallel(
       .push(Tween.set(prvScreenSprite, SpriteAccessor.POS_XY).target(0, 0)) 
       .push(Tween.to(prvScreenSprite, SpriteAccessor.POS_XY, 1.5f). target(-Constants.WIDTH, 0).delay(0.1f)) 
       .push(Tween.set(loading, SpriteAccessor.POS_XY).target (Constants.WIDTH, 0).end().start(manager); 
     } 
     if(animationFinished()) { 
      loadAssets(); 
      JsonLevel.loadLevels(); 
      lvl = JsonLevel.levels.get(currentLevel); 
      gameMain.setScreen(new PlayScreen(gameMain, lvl, currentLevel)); 
     } 
    } 

    public void loadAssets() { 
     // loading asset 
    } 

    @Override 
    public void render(float delta) { 
     manager.update(delta); 
     animationFinished(); 

     batch.begin(); 
     prvScreenSprite.draw(batch); 
     loading.draw(batch); 
     batch.end(); 
    } 

    public boolean animationFinished() { 
     if(loading.getX() == 0) { 
      return true; 
     } else return false; } 
} 
+1

你能分享代碼嗎? – pr0gramist

回答

0

需要

if(animationFinished()) { 
     loadAssets(); 
     JsonLevel.loadLevels(); 
     lvl = JsonLevel.levels.get(currentLevel); 
     gameMain.setScreen(new PlayScreen(gameMain, lvl, currentLevel)); 
    } 

分支移動到render方法來檢查動畫是否完成每一幀 - 如果它是你應加載水平然後設置新屏幕