我正在嘗試將2D物理運用到小行星類型的遊戲中。我在窗口邊界設置了碰撞邊界。然而,當我將我的船體精靈碰撞到一個邊界(並且爲x或y軸反轉適當的速度)時,我在移動時偶爾會出現一個小故障。船會暫時跳起來,但如果我將移動鍵保持足夠長的時間,它通常會自行修復。關於運動的2D雪碧物理
問題是這個毛刺是顯而易見的。
相關代碼段:
#update velocity
def velocity(self, speed):
self.vx += math.sin(math.radians(self.angle)) * speed
self.vy += math.cos(math.radians(self.angle)) * speed
magnitude = math.sqrt(self.vx*self.vx + self.vy*self.vy)
if magnitude > self.maxvel:
self.vx *= 4/magnitude
self.vy *= 4/magnitude
if self.speed >= self.maxvel:
self.speed = self.maxvel
if self.speed <= -self.maxvel:
self.speed = -self.maxvel
我的移動代碼:
if (key[K_UP]):
newShip.speed += 1
newShip.moving = 1
if (key[K_DOWN]):
newShip.speed -= 1
newShip.moving = 1
if (key[K_LEFT]):
newShip.angle += 4
if (key[K_RIGHT]):
newShip.angle -= 4
我完整的代碼是在這裏:http://pastebin.com/19rHq97R要運行只有2個要求,你真的可以用任何東西我猜圖像。
我認爲這個問題與檢測碰撞時x或y速度的逆轉有關,但我不能確定確切的問題。任何見解都會被讚賞。
編輯:我做了一些更多的調查。我不知道突然跳躍是因爲我沒有任何類型的加速編程。我的終端日誌中摘錄了http://pastebin.com/vFy9tjyN節選。我打印出我的程序中的相關變量。
您是否使用固定時間步?否則,時間步跳可能會導致不穩定。意思是如果它穿透邊界,它可以移動800個單位,而下一個框架只移動600個。在已經進入後,使它碰撞。所以交換會導致它停留並反彈。 – ninMonkey 2013-02-20 23:49:04
@monkey我甚至沒有考慮到時間步驟。我並不完全相信它與碰撞本身有關,因爲船可能發生碰撞,行駛一段時間,然後當施加「推力」時,問題仍然存在。 – KNova 2013-02-21 01:27:20
可能不相關,但cos是x,正弦是y。 – ninMonkey 2013-02-22 01:49:56