Wie erstelle ich in PyGame einen springenden Ball, ohne auf die Vector2-Klasse angewiesen zu sein?

Mary-Kate Olsen
Freigeben: 2024-10-18 20:57:02
Original
619 Leute haben es durchsucht

How to Make a Bouncing Ball in PyGame without Relying on Vector2 Class?

Hüpfender Ball in PyGame ohne Vector2-Klasse

In diesem Szenario stoßen Sie auf ein Problem, das dazu führt, dass ein Ball im Skript von PyGame von Wänden abprallt , insbesondere beim Aufprall auf die Oberwand. Trotz Ihrer Recherchen stehen Sie immer noch vor Herausforderungen.

Verschachtelte Schleifen und alternativer Ansatz:

Das Hauptproblem sind mehrere verschachtelte Schleifen. Bewegen Sie den Ball stattdessen kontinuierlich innerhalb der Anwendungsschleife.

<code class="python">box.y -= box.vel_y        
box.x += box.vel_x</code>
Nach dem Login kopieren

Definieren eines rechteckigen Bereichs:

Erstellen Sie mit a einen rechteckigen Bereich oder Grenzen für den Ball PyGame Rect-Objekt. Dadurch wird der Bereich definiert, innerhalb dessen sich der Ball bewegen kann.

<code class="python">bounds = window.get_rect() # full screen</code>
Nach dem Login kopieren

Oder Sie können einen bestimmten rechteckigen Bereich angeben:

<code class="python">bounds = pygame.Rect(450, 200, 300, 200) </code>
Nach dem Login kopieren

Bewegungsrichtung ändern:

Wenn der Ball die Grenzen berührt, ändern Sie seine Bewegungsrichtung mit dem folgenden Code:

<code class="python">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>
Nach dem Login kopieren

Beispiel:

Hier ist ein Beispiel das diesen Ansatz demonstriert:

<code class="python">import pygame

box = Circle(600,300,10)

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

    bounds = pygame.Rect(450, 200, 300, 200)
    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 

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

Dieses Beispiel enthält ein rotes Rechteck, das die Grenzen darstellt, innerhalb derer sich der Ball bewegt und von den Wänden abprallt.

Das obige ist der detaillierte Inhalt vonWie erstelle ich in PyGame einen springenden Ball, ohne auf die Vector2-Klasse angewiesen zu sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!