ホームページ >バックエンド開発 >Python チュートリアル >PyGame Atari Breakout でボールが壁から逃げないようにする方法は?

PyGame Atari Breakout でボールが壁から逃げないようにする方法は?

DDD
DDDオリジナル
2024-10-18 21:02:30915ブラウズ

How to Prevent the Ball from Escaping Walls in PyGame Atari Breakout?

PyGame でボールを壁から跳ね返らせる

PyGame で Atari Breakout を作成する際にボールが壁から跳ね返るというクエリは、次の方法で解決できます。ネストされたループ。ただし、より効率的なアプローチのために、アプリケーション ループを継続的に使用することをお勧めします。改善された解決策は次のとおりです。

問題の理解と解決

コードの問題は、複数のネストされたループの使用に起因しています。これを解決するには、アプリケーション ループ内でボールを継続的に移動します。

box.y -= box.vel_y
box.x += box.vel_x

ボールの領域の定義

ボールの長方形の領域を定義するには、pygame を使用します。 .Rect オブジェクト。画面全体または特定の領域を含む領域を作成できます。例:

bounds = window.get_rect() # full screen

または

bounds = pygame.Rect(450, 200, 300, 200)  # rectangular region

ボールの方向の変更

境界との衝突時にボールの方向を変更するにはでは、次のコードを使用します:

if box.x - box.radius < bounds.left or box.x + box.radius > bounds.right:
    box.vel_x *= -1
if box.y - box.radius < bounds.top or box.y + box.radius > bounds.bottom:
    box.vel_y *= -1

実装例

以下は、上で概説した手順を示すスクリプトの例です:

<code class="python">import pygame

# Create a circle object
box = Circle(600,300,10)

# Initialize PyGame
pygame.init()
screen = pygame.display.set_mode((1200, 700))

# Define the boundary rectangle
bounds = pygame.Rect(450, 200, 300, 200)

# Game loop
run = True
start = False
clock = pygame.time.Clock()

while run:                     
    clock.tick(120)  

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE]:
        start = True

    if start:
        box.y -= box.vel_y        
        box.x += box.vel_x

        if box.x - box.radius < bounds.left or box.x + box.radius > bounds.right:
            box.vel_x *= -1 
        if box.y - box.radius < bounds.top or box.y + box.radius > bounds.bottom:
            box.vel_y *= -1 

    screen.fill((0,0,0))
    pygame.draw.rect(screen, (255, 0, 0), bounds, 1)
    pygame.draw.circle(screen, (44,176,55), (box.x, box.y), box.radius)
    pygame.display.update()</code>

vector2 クラスの使用

前述のアプローチには Vector2 クラスは必要ありませんが、コードを合理化し、より汎用性の高いものにすることができます。 Vector2 クラスの使用方法の詳細については、PyGame の Vector2 ドキュメントを参照するか、オンラインでチュートリアルを検索してください。

以上がPyGame Atari Breakout でボールが壁から逃げないようにする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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