LibGDX - 结束一个级别并突破Render()

时间:2013-10-23 20:12:10

标签: libgdx

游戏的基本思想是收集房间中的所有物品,以便继续下一个。我知道的不是原创...当收集所有项目时,将显示一个屏幕,显示“Level Complete”,然后几秒后将重新加载下一个级别。我遇到的问题是,当我登陆最后一个项目时,检查“是否收集了所有项目?”规则很满意游戏突然冻结,实际上开始震动。玩家精灵就像物品一样被冻结,游戏无法再与之交互。我只能假设游戏被困在render()方法中并且没有逃脱,或者再次满足相同的条件。

有没有人对如何正确地突破主render()方法以遍历到新屏幕有任何想法?

在我的主render()方法中,我调用了另一个检查游戏状态的方法,即在房间里收集了所有项目......

render() {

    ... code ...
    checkGameState()
}

然后checkGameState()如下所示:

public void checkGameState() 
{

    //If the player has collected all of the items on a level then do something
    //if(stats.getItemsCollected() == stats.getTotalItems()) {
        //reset some stuff
        stats.resetItems();
        stats.incLevel();

        //show the intermediate screen or menu screen

        //load the next level
        showLevelCompleteScreen();


        //

    }
}

ShowLevelCompleteScreen()方法只是尝试按如下方式切换屏幕:

public void showLevelComplete()
{
    game.setScreen(SuperBlockMan.LevelComplete);
}

1 个答案:

答案 0 :(得分:1)

首先我建议你不要重置你的屏幕,而是正确地dispose(),然后在一个级别完成之后创建一个全新的屏幕。这样可以避免错误重置导致的错误。

将屏幕切换到LevelComplete后,渲染不会停止,但是libGDX将开始调用LevelComplete屏幕的渲染。

关于你的角色,项目等的冻结,我猜你不会在LevelComplete屏幕的渲染方法中调用Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);,这就是为什么你仍然可以看到游戏中的所有内容,但无法进行交互了。