我目前正处于使用 pygame 为学校项目制作经典 2D 平台游戏的早期阶段,当我遇到这个相当奇怪的问题时,我正在尝试跳跃机制。即使我考虑了更新之间的时间增量,当帧之间的时间增加时,跳跃长度和高度都会变短。
在这里,我让 Player 对象的 3 个实例在屏幕上跳跃,以 700 像素/秒的恒定速度向右移动,初始向上速度为 700 像素/秒。它们每个人为增加的最小 delta_time 分别为 0.001s、0.017s 和 0.1s。
这是在 Player 对象的更新函数中计算新速度和位置向量的方式,每帧调用一次(delta_time 从主更新循环传入):
self.speed.y += 1000.0 * delta_time
self.position += self.speed * delta_time
这就是在主更新循环的每个周期结束时计算 delta_time 的方式(第一帧初始化为零):
delta_time = time.time() - pre_time
pre_time = time.time()
if delta_time < min_delta_time:
time.sleep(min_delta_time - delta_time)
delta_time += time.time() - pre_time
pre_time = time.time()
min_delta_time 表示帧更新之间的最短时间。
经过多次尝试修复此问题,我很确定缺陷在于更新速度的行,但即使在仔细检查数学之后,我仍然无法弄清楚问题所在。起初我认为可能是 delta_time 不精确,但如果是这种情况,水平速度也会受到影响,并且轨迹仍然会排列。
那么我可以改变任何东西以使跳跃/重力更加一致吗?
猛跑小猪
相关分类