この質問には、プレイヤー キャラクターを画面上に維持したまま、スペース バーを押したときに弾を撃つ機能の実装が含まれます。
質問者のコードには当初、射撃時にプレイヤーキャラクターが消えるという問題がありました。これは、射撃とプレイヤーの移動が別のループに分離されていたためです。これに対処するには、これらを 1 つのメイン ループに結合し、両方の動作が同時に更新されるようにする必要があります。
もう 1 つの問題は、弾丸が画面の上部に到達したときに射撃ループを中断できないことでした。元のコードでは、無限に続く while ループが使用されていました。これを修正するには、弾丸が一番上に到達したかどうかをチェックする条件を指定して while ループを使用する必要があります。
コードの改訂版は次のとおりです。
<code class="python">import pygame, os # Boilerplate setup omitted for brevity class Player: def __init__(self, x, y, height, width): ... def draw(self): ... def move_left(self): ... def move_right(self): ... class Bullet: def __init__(self, x, y): ... def update(self): ... def draw(self): ... # Lists of bullets bullets = [] # Initialize player p = Player(600, 500, 50, 30) # Main game loop run = True while run: clock.tick(100) # Handle 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() # Update position and remove bullet if it goes off-screen if b.y < 0: bullets.remove(b) # Update frame d.fill((98, 98, 98)) for b in bullets: b.draw() p.draw() win.update()</code>
以上がゲーム内でプレイヤーを表示したまま弾を発射させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。