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

2024-05-21 07:54:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我被困在李·沃恩不切实际的Python项目书的第13章(模拟外星火山)的一个特定项目上

在这本书中,我们要模拟木星卫星木卫一上的火山。代码可以在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”在任何给定的时间段内都会保持不变。然而,模拟显示了弹丸的运动……如何


Tags: 项目self类型粒子mathsingravity木星
1条回答
网友
1楼 · 发布于 2024-05-21 07:54:02

重力不是添加到self.y,而是添加到self.dy。这在每一帧中都会发生。因此,在每个帧中self.dy的量稍微增加,并且对象的位置在每个帧中稍微改变。这会导致运动加速和下落速度加快

相关问题 更多 >