2016-08-15 79 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方法来检查动画是否完成每一帧 - 如果它是你应加载水平然后设置新屏幕