ホームページ  >  記事  >  バックエンド開発  >  ゲーム内でプレイヤーを表示したまま弾を発射させるにはどうすればよいですか?

ゲーム内でプレイヤーを表示したまま弾を発射させるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 11:46:02559ブラウズ

How to Make a Player Shoot Bullets in a Game While Keeping the Player Visible?

スペース バーで弾を撃つ

この質問には、プレイヤー キャラクターを画面上に維持したまま、スペース バーを押したときに弾を撃つ機能の実装が含まれます。

問題と解決策

質問者のコードには当初、射撃時にプレイヤーキャラクターが消えるという問題がありました。これは、射撃とプレイヤーの移動が別のループに分離されていたためです。これに対処するには、これらを 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>

主な変更点:

  • 射撃とプレイヤーの移動ロジックが 1 つのメイン ゲーム ループに結合されました。
  • 弾丸更新機能は、弾丸が消えたかどうかを確認するようになりました。
  • メイン ループは継続的にプレーヤーと弾丸を更新して描画し、両方が画面上に存在することを確認します。

以上がゲーム内でプレイヤーを表示したまま弾を発射させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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