ホームページ  >  記事  >  バックエンド開発  >  Pygame でスペースバーを使用して弾丸の発射を実装するにはどうすればよいですか?

Pygame でスペースバーを使用して弾丸の発射を実装するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-31 20:47:29617ブラウズ

How do I implement Bullet Firing Using the Spacebar in Pygame?

スペースバーを使用した弾丸の射撃

スペースバーを使用した射撃を実装するには、いくつかの重要な手順に従います。

  1. 弾丸のリストの作成: 弾丸は複数の発射体を同時に発射するため、弾丸のインスタンスを保存するリストを作成します。
  2. 弾丸の初期化: 初期化リスト内にインスタンスを作成し、その位置やその他の属性を指定して弾丸を作成します。
  3. 弾丸の位置の更新: 各フレームで、速度と方向に基づいて各弾丸の位置を更新します。
  4. 画面外の箇条書きの削除: 画面から出た箇条書きがあるかどうかを確認し、表示されなくなったのでリストから削除します。
  5. スペースバー キー イベントを処理します。 : スペースバー キーが押されると、リストに新しい弾丸を追加して発砲メカニズムがトリガーされます。

これらの変更を加えて更新されたコードは次のようになります:

import pygame, os

os.environ["SDL_VIDEO_CENTERED"] = "1"
pygame.init()

win = pygame.display
d = win.set_mode((1200, 600))
clock = pygame.time.Clock()

class Player:
    def __init__(self, x, y, height, width):
        self.x = x
        self.y = y
        self.height = height
        self.width = width
        self.speed = 2

    def draw(self):
        pygame.draw.rect(d, (0, 0, 0), (self.x, self.y, self.width, self.height))

    def move_left(self):
        self.x -= self.speed

    def move_right(self):
        self.x += self.speed


class Bullet:
    def __init__(self, x, y):
        self.radius = 10
        self.speed = 10
        self.x = x
        self.y = y

    def update(self):
        self.y -= self.speed#
    
    def draw(self):
        pygame.draw.circle(d, (255, 0, 0), (self.x, self.y), self.radius)


bullets = []
p = Player(600, 500, 50, 30) 

run = True
while run:
    clock.tick(100)
        
    # Handel events
    for event in pygame.event.get():
        if event.type ==  pygame.QUIT:
            run = False
        if event.type ==  pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullets.append(Bullet(p.x+p.width//2, p.y))

    # Update objects
    keys = pygame.key.get_pressed()        
    if keys[pygame.K_LEFT]:
        p.move_left()
    if keys[pygame.K_RIGHT]:
        p.move_right()
    for b in bullets:
        b.update()
        if b.y < 0:
            bullets.remove(b)

    # Clear display
    d.fill((98, 98, 98))

    # Draw scene
    for b in bullets:
        b.draw()
    p.draw()

    # Update display
    win.update()

このコードは、スペースバーによる弾丸の発射をスムーズに処理し、元のリクエストで言及された問題を解決します。

以上がPygame でスペースバーを使用して弾丸の発射を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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