为什么在物理计算中使用增量时间会产生比预期慢的代码?

时间:2018-06-14 10:51:53

标签: python-3.x pygame physics pygame-clock

我有一个使用Pygame构建的简单射弹运动模拟。我将FPS限制为60并计算每帧的增量时间。然后我使用这个增量时间来更新我的射弹的位置。但问题是,更新似乎很慢。

根据我对给定射弹轨迹的纸张计算,射弹应在不到5秒的时间内完成其路径。然而,在射弹完成其路径之前已经过了更多的时间。这是我的代码:

def update(self, dt):
    if not self.is_on_ground:
        self.time += dt # time is initialized to 0

        # calculate initial x and y velocities
        vx = self.vi * math.cos(self.angle)
        vy = self.vi * math.sin(self.angle)

        # kinematics
        self.dx = (vx * self.time)
        self.dy = (vy * self.time) + ((-9.8 * (self.time ** 2)) / 2)

        # update old positional values
        self.x = self.dx + self.init_x
        self.y = self.init_y - self.dy

        # update rectangle position
        self.rect.center = (self.x, self.y)

        # check if the ball has hit the ground
        self.check_collisions()

我希望球会在计算时间的同时击中地面,但是,它并没有。我已经排除了这是一个FPS问题的可能性,因为打印dt总是给我一个0.017秒(大约1/60)。我错过了什么吗?

以下是一个示例运行:

t       x       y       vi      angle
0.5     687.51  751.21  21.93   1.15
t       x       y       vi      angle
1.0     692.02  744.88  21.93   1.15
t       x       y       vi      angle
1.51    696.63  740.95  21.93   1.15
t       x       y       vi      angle
2.02    701.14  739.59  21.93   1.15
t       x       y       vi      angle
2.53    705.78  740.77  21.93   1.15
t       x       y       vi      angle
3.04    710.38  744.5   21.93   1.15
t       x       y       vi      angle
3.55    715.0   750.83  21.93   1.15
t       x       y       vi      angle
4.07    719.62  759.75  21.93   1.15

注意 - 较低的y值表示"物理"更高

使用等式v_yf = v_yi + gt^2并求解t将得到大约2秒的时间。根据结果​​,该计划需要两倍的时间来实现这一目标。

编辑:添加了日志

0 个答案:

没有答案