微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame 中的编码重力不切实际的 Python 项目

如何解决Pygame 中的编码重力不切实际的 Python 项目

我被困在 Lee Vaughan 的《不切实际的 Python 项目》一书中的一个特定项目 - 第 13 章(模拟外星火山)。

在其中,我们应该模拟木星卫星 Io 上的火山。代码可以在 here:

找到

我的具体查询

据我所知,粒子的位移首先通过以下方式计算:

radians = math.radians(orient)
self.dx = self.vel * math.cos(radians)
self.dy = -self.vel * math.sin(radians) # negative as y increases down

然后重力被添加到 Y 轴,因此:

self.dy += Particle.GraviTY
pg.draw.line(self.background,self.color,(self.x,self.y),(self.x + self.dx,self.y + self.dy))
self.x += self.dx
self.y += self.dy

我的问题是:在上述所有内容中,在某个时刻,重力必须足够强大,以至于粒子开始下降而不是上升;然而,self.dy 只是两个常数(初始速度、重力)的函数。所以它应该继续走直线。例如,对于以某个角度(例如 z)喷射的粒子:

self.dy = self.vel*math.sin(z) + particle.GraviTY

这里,

  1. self.vel 已修复
  2. z 对于每种粒子类型都是固定的
  3. 每种粒子类型的重力都是固定的

因此,'dy' 将在任何给定时间段内保持不变。然而,模拟显示一个弹丸运动......如何?

解决方法

重力不加到self.y,而是加到self.dy。这发生在每一帧中。因此,self.dy的数量在每一帧中增加一点,物体的位置在每一帧中变化更多一点。这会导致运动加速和下降速度增加。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。