簡體   English   中英

關於運動的2D精靈物理

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

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