[英]2D Sprite Physics regarding movement
我正在嘗試將2D物理實現到小行星游戲中。 我在窗口邊界處設置了碰撞邊界。
但是,當我將飛船精靈碰撞到邊界(並反轉x或y軸的適當速度)時,我偶爾會在移動時出現毛刺。 該船將暫時跳下,但是如果我按住移動鍵足夠長的時間,通常它將自行修復。
問題是這種故障很明顯。
相關代碼部分:
#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從我的終端日志中摘錄。 我從程序中打印出相關變量。
嘗試這個:
DirDict = {"left": (-speed, 0), "right": (speed, 0), "up": (0, -speed), "left": (0, speed)}
if w:
Direction = DirDict["left"]
我認為這樣會更穩定。 它一直為我工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.