ホームページ >バックエンド開発 >Python チュートリアル >PyGameでマウスカーソルに向かって弾丸を発射させるにはどうすればよいですか?
PyGame でマウス カーソルに向かって弾丸を発射する方法?
マウス カーソルに向かって弾丸を発射するときに問題が発生しました。 PyGameで。現在のコードには、Bullet クラスの作成、箇条書きの追加、角度の計算が含まれています。ただし、弾丸が期待どおりに回転および移動していないことがわかります。アプローチを検討して改善してみましょう。
まず、回転に関する問題は、pygame.transform.rotate が既存の弾丸オブジェクトを更新せずに新しい回転サーフェスを作成するという事実から生じます。スプライトを所定の位置で回転するには、sprite.image = pygame.transform.rotate(sprite.image, angle) を使用する必要があります。
方向の取得に関しては、角度の間で常に変化する角度を使用します。プレイヤーとマウスの位置が異なるため、弾丸の動きが一貫性がなくなります。代わりに、弾丸が発射されるときに方向を一度設定する必要があります:
self.dir = pygame.mouse.get_rel() # Relative movement since the last event
方向を正規化し、速度を設定するには、次のようにします:
dist = math.sqrt(self.dir[0]**2 + self.dir[1]**2) self.speed = self.speed / dist self.dir = (self.dir[0]/dist, self.dir[1]/dist)
最後に、計算された速度を更新関数の弾丸の位置に追加する必要があります:
self.pos += self.speed[0], self.speed[1]
前述の改善を組み込んだ例を次に示します:
class Bullet(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((10, 10)) self.image.fill((255, 0, 0)) self.rect = self.image.get_rect() self.speed = 10 def update(self): angle = math.atan2(self.dir[1], self.dir[0]) self.image = pygame.transform.rotate(self.image, -angle * (180 / math.pi)) self.pos += self.speed[0], self.speed[1] self.rect = self.image.get_rect(center=self.pos)
以上がPyGameでマウスカーソルに向かって弾丸を発射させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。