游戏的基本思想是收集房间中的所有物品,以便继续下一个。我知道的不是原创...当收集所有项目时,将显示一个屏幕,显示“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);
}
答案 0 :(得分:1)
首先我建议你不要重置你的屏幕,而是正确地dispose()
,然后在一个级别完成之后创建一个全新的屏幕。这样可以避免错误重置导致的错误。
将屏幕切换到LevelComplete后,渲染不会停止,但是libGDX将开始调用LevelComplete屏幕的渲染。
关于你的角色,项目等的冻结,我猜你不会在LevelComplete屏幕的渲染方法中调用Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
,这就是为什么你仍然可以看到游戏中的所有内容,但无法进行交互了。