【发布时间】:2015-09-06 09:01:13
【问题描述】:
我刚刚使用 libgdx 和 box2d 为 android 开发了我的垂直滚动游戏。 一切正常,直到我实现了游戏状态的处理(暂停、恢复、运行、游戏结束)。我遵循了 superjumper 的示例并且它有效。这是我更新状态的代码:
@Override
public void update(float deltaTime) {
switch (state) {
case GAME_RUNNING:
assetsLoader.update(deltaTime, world);
world.step(deltaTime, 12,6);
updateRunning();
break;
case GAME_PAUSED:
world.step(0, 12, 6);
updatePaused();
break;
}
}
这里有我在渲染方法中调用的函数 draw:
public void draw(){
switch (state) {
case GAME_RUNNING:
presentRunning();
break;
case GAME_PAUSED:
presentPaused();
break;
case GAME_OVER:
presentGameOver();
break;
}
}
现在的问题是,当我开始游戏时,我尝试了很多延迟(我的 fps 大约为 59-61)和我的身体(我只有 10 个,它们以永远不变的线速度移动)开始口吃。我已经将 restitution 设置为 0 但没有任何改变,所以我认为问题出在 switch 状态可能是因为它降低了我的游戏性能,也因为在我实施这部分之前我没有遇到这些问题。
是否可以通过其他方式管理游戏状态?
【问题讨论】:
-
你的问题可能出在“present___”方法上,而不是状态处理本身。
-
感谢您的回答@EpicPandaForce,但我的“present_”方法没有任何问题。如果我从函数 draw 中删除开关部分并只放置“presentRunning”以及函数更新中的开关部分,则游戏可以正常工作(显然我无法暂停它并且玩家不会死亡)。
-
当您删除
switch时,FPS 有多高?对我来说,听起来你的状态有时是错误的,因此身体在某些帧内不会移动,从而导致口吃。 -
您是否使用缩放相机缩放身体?还是你绘制和渲染实际尺寸?