2013-10-23 23 views
0

游戏的基本思想是收集,以进入下一个在一个房间里的所有项目。我知道的不是很原始的......当所有物品都被收集后,屏幕上将显示“等级完成”,然后几秒钟后,下一个等级将被重新加载。我遇到的问题是,当我登上最后一个项目时,检查“是否收集了所有物品?”规则满足游戏突然冻结,实际开始动摇。玩家精灵就像物品一样冻结在原地,游戏不能再与其互动。我只能假设游戏被困在render()方法中,并且没有转义,或者再次满足相同的条件。LibGDX - 结束一个级别和打破的渲染()

有没有人有任何想法如何摆脱主要渲染()方法正确地遍历到新的屏幕?

在我的主要渲染()方法,我有哪些检查游戏状态的另一种方法,即一个电话,都对项目的在房间里收集...

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

首先,我建议您不要重置您的屏幕,但要正确地设置dispose(),然后在完成一个关卡后创建一个全新的屏幕。这可以帮助您避免由于重置错误而导致的错误。

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

至于冻结你的角色,物品等,我想你不要在你的LevelComplete Screen的渲染方法中调用Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);,这就是为什么你仍然可以看到你的游戏中的所有东西,但不能再进行交互。

+0

嗨。感谢你的回答。我确实有你在我的另一个屏幕的渲染方法中提出的Gdx.gl.glclear的东西,所以我想它一定是放弃了。问题是,我不完全明白这一点。 GameScreen和LevelComplete屏幕一样实现屏幕。我认为这是好的,但你如何正确地处理屏幕。我明白hide()方法可能被调用,但我不确定如何处理它。我真的很努力地找到任何不太复杂或依赖于Scene2D等的例子。它必须能够切换屏幕? –

+0

对'setScreen'的调用将导致'Game'类在当前迭代之后切换屏幕。它会导致调用hide()和调用show()。当您执行setScreen时,Dispose必须由您自己调用。当你使用舞台时,你应该记得切换InputProcessor。没有更多的代码,这是一个纯粹的猜谜游戏,你可能做错了或忘了做... – noone