簡體   English   中英

Pygame 中的編碼重力(不切實際的 Python 項目)

[英]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

這里,

  1. self.vel 是固定的
  2. z 對於每種粒子類型都是固定的
  3. GRAVITY 對於每種粒子類型都是固定的

因此,“dy”在任何給定時間段內都將保持不變。 然而,模擬顯示了彈丸運動......如何?

重力不是添加到self.y ,而是添加到self.dy 這發生在每一幀。 因此, self.dy的數量在每一幀中都會增加一點,而 object 的 position 在每一幀中都會發生更多的變化。 這會導致運動加速和下降速度增加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM