我最近在这里问了一个关于游戏编程的问题,因此它会有效且不会滞后。
我做了一个像地狱一样的游戏。我怀疑我编程游戏循环的方式可能是问题的根源。
我想向你描述我游戏中的情况,然后介绍我编程游戏循环的方式。
这是两个玩家的游戏。每个玩家控制一个坦克。每个坦克都可以射击导弹。每个坦克都可以从现场收集“礼物”。
我的游戏循环(每个阶段都在游戏循环调用的方法中):
问题:
感谢您的帮助。
答案 0 :(得分:0)
我不一定会说它效率低下,因为你只是给我们一些关于在其他几款游戏中可以做些什么的概念。听起来你所做的只是移动物体和检查碰撞,我假设使用AABB碰撞检测。这里没什么特别贵的。当然它还有改进的余地。见#2。
您可能不止一次获得输入,因此您可以做的是在每个帧的开头获取输入并以某种方式存储它。我不知道你正在使用什么形式的输入,但是如果你正在使用键盘,你可以获得并存储WASD键的状态,并在处理油箱输入时检查这些状态。
你可以做的最值得注意的优化是每次导弹循环3次。第一次是移动它们,第二次是检查它们的碰撞,第三次检查它们是否在屏幕外。在一个循环中,您可以移动它们,检查它们是否在屏幕外,然后检查它们是否与对方坦克发生碰撞。我建议按此顺序执行此操作,因为如果子弹碰巧移动到屏幕外,您可以避免进行不必要的碰撞检查。
最后,你只需要检查两个坦克在移动时是否发生碰撞,你只需要做一次。如果你需要它,那么两个坦克相互叠加的每一帧都会发生一些事情,你可以存储碰撞的状态,你只需要在一个坦克移动时再次更新它。
这取决于。您可能通过睡眠锁定帧速率,因此您可能会睡眠时间过长。尝试删除您的帧速率限制方法,看看会发生什么。