0

小惑星タイプのゲームに 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端末ログからの抜粋。プログラムから関連する変数を出力します。

4

1 に答える 1

0

これを試して:

DirDict = {"left": (-speed, 0), "right": (speed, 0), "up": (0, -speed), "left": (0, speed)}

if w:
    Direction = DirDict["left"]

これはより安定すると思います。それはいつも私のために働いています。

于 2014-09-09T00:58:36.797 に答える