Heim >Backend-Entwicklung >Python-Tutorial >Wie kann verhindert werden, dass der Ball in PyGame Atari Breakout aus Wänden entweicht?

Wie kann verhindert werden, dass der Ball in PyGame Atari Breakout aus Wänden entweicht?

DDD
DDDOriginal
2024-10-18 21:02:30914Durchsuche

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

Mit PyGame einen Ball von Wänden abprallen lassen

Ihre Frage bezüglich des von Wänden abprallenden Balls beim Erstellen von Atari Breakout in PyGame kann mithilfe von beantwortet werden verschachtelte Schleifen. Für eine effizientere Vorgehensweise empfehlen wir jedoch, die Anwendungsschleife kontinuierlich zu nutzen. Hier ist eine verbesserte Lösung:

Das Problem verstehen und lösen

Das Problem in Ihrem Code ist auf die Verwendung mehrerer verschachtelter Schleifen zurückzuführen. Um dieses Problem zu lösen, bewegen Sie den Ball kontinuierlich innerhalb der Anwendungsschleife:

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

Den Bereich des Balls definieren

Um einen rechteckigen Bereich für den Ball zu definieren, verwenden Sie ein Pygame .Rect-Objekt. Sie können einen Bereich erstellen, der den gesamten Bildschirm oder einen bestimmten Bereich umfasst. Zum Beispiel:

bounds = window.get_rect() # full screen

oder

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

Ändern der Richtung des Balls

Um die Richtung des Balls bei Kollision mit der Begrenzung zu ändern , verwenden Sie den folgenden Code:

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

Beispielimplementierung

Unten finden Sie ein Beispielskript, das die oben beschriebenen Schritte demonstriert:

<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>

Verwendung der vector2-Klasse

Während der oben genannte Ansatz die vector2-Klasse nicht erfordert, kann er Ihren Code rationalisieren und vielseitiger machen. Weitere Informationen zur Verwendung der Vector2-Klasse finden Sie in der Vector2-Dokumentation von PyGame oder suchen Sie online nach Tutorials.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass der Ball in PyGame Atari Breakout aus Wänden entweicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn