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