[英]Coding Gravity in Pygame (Impractical Python Projects)
我被困在 Lee Vaughan 的不切實際的 Python 項目書的第 13 章(模擬外星火山)上。
在其中,我們應該模擬木星衛星 Io 上的火山。 代碼可以在這里找到:
我的具體查詢:
我了解粒子的位移首先通過以下方式計算:
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 只是兩個常數(初始速度、重力)的 function。 所以它應該在一條直線上繼續 go。 例如,對於以某個角度(例如 z)噴射的粒子:
self.dy = self.vel*math.sin(z) + particle.GRAVITY
這里,
因此,“dy”在任何給定時間段內都將保持不變。 然而,模擬顯示了彈丸運動......如何?
重力不是添加到self.y
,而是添加到self.dy
。 這發生在每一幀。 因此, self.dy
的數量在每一幀中都會增加一點,而 object 的 position 在每一幀中都會發生更多的變化。 這會導致運動加速和下降速度增加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.