ホームページ >バックエンド開発 >Python チュートリアル >PyGameでマウス座標を使用して弾丸の狙いを定める方法?

PyGameでマウス座標を使用して弾丸の狙いを定める方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 17:30:30455ブラウズ

How To Aim Bullets Using Mouse Coordinates in PyGame?

マウス座標を使用して PyGame で弾丸を狙う

問題ステートメント

弾丸クラスを作成したにもかかわらず、弾丸はマウスカーソルの意図した方向に移動します。弾丸を回転および移動しようとすると、不安定な動作が発生しました。

解決策

1.回転と初期化:

  • pygame.transform.rotate は元のオブジェクトを変更しませんが、新しい回転サーフェスを作成します。弾丸を正しく回転して初期化するには、次のコードを使用します:

    <code class="python">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))
    
    self.bullet = pygame.Surface((7, 2)).convert_alpha()
    self.bullet.fill((255, 255, 255))
    self.bullet = pygame.transform.rotate(self.bullet, angle)</code>

2.方向と単位ベクトル:

  • 弾丸が発射されるとき、方向はその瞬間に決定されるべきであり、継続的に変化してはならない。
  • から方向ベクトルを計算するプレーヤーをマウスの位置に合わせて正規化し、単位ベクトルを取得します:

    <code class="python">mx, my = pygame.mouse.get_pos()
    self.dir = (mx - x, my - y)
    length = math.hypot(*self.dir)
    if length == 0.0:
      self.dir = (0, -1)
    else:
      self.dir = (self.dir[0]/length, self.dir[1]/length)</code>

3.位置の更新:

  • 速度で方向をスケーリングし、現在の位置に追加することで弾丸の位置を更新します:

    <code class="python">self.pos = (self.pos[0]+self.dir[0]*self.speed, 
              self.pos[1]+self.dir[1]*self.speed)</code>

4.弾丸の描画:

  • 回転した弾丸を正しい位置に描画するには:

    <code class="python">bullet_rect = self.bullet.get_rect(center = self.pos)
    surf.blit(self.bullet, bullet_rect)  </code>

コード例:

<code class="python">import pygame
import math

class Bullet:
    def __init__(self, x, y):
        # Calculate direction and rotation
        ...

        # Create the bullet surface
        ...

    def update(self):
        # Update bullet position
        ...

    def draw(self, surf):
        # Draw the rotated bullet
        ...

bullets = []
pos = (250, 250)
run = True
while run:
    # Game loop
    ...

    for bullet in bullets[:]:
        # Update bullets
        ...

    # Draw the scene
    ...</code>

以上がPyGameでマウス座標を使用して弾丸の狙いを定める方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。