Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menghalang Bola daripada Melarikan Diri dari Dinding dalam PyGame Atari Breakout?

Bagaimana untuk Menghalang Bola daripada Melarikan Diri dari Dinding dalam PyGame Atari Breakout?

DDD
Lepaskan: 2024-10-18 21:02:30
asal
907 orang telah melayarinya

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

Membuat Bola Melantun Dari Dinding dengan PyGame

Pertanyaan anda mengenai bola yang melantun dari dinding semasa mencipta Atari Breakout dalam PyGame boleh ditangani dengan menggunakan gelung bersarang. Walau bagaimanapun, untuk pendekatan yang lebih cekap, kami mengesyorkan menggunakan gelung aplikasi secara berterusan. Berikut ialah penyelesaian yang dipertingkatkan:

Memahami dan Menyelesaikan Isu

Isu dalam kod anda berpunca daripada penggunaan berbilang gelung bersarang. Untuk menyelesaikan masalah ini, gerakkan bola secara berterusan dalam gelung aplikasi:

box.y -= box.vel_y
box.x += box.vel_x
Salin selepas log masuk

Menentukan Wilayah Bola

Untuk menentukan kawasan segi empat tepat untuk bola, gunakan pygame .Benda lurus. Anda boleh membuat kawasan yang merangkumi keseluruhan skrin atau kawasan tertentu. Contohnya:

bounds = window.get_rect() # full screen
Salin selepas log masuk

atau

bounds = pygame.Rect(450, 200, 300, 200)  # rectangular region
Salin selepas log masuk

Menukar Arah Bola

Untuk menukar arah bola apabila berlanggar dengan sempadan , gunakan kod berikut:

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
Salin selepas log masuk

Contoh Pelaksanaan

Di bawah ialah skrip contoh yang menunjukkan langkah-langkah yang digariskan di atas:

<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>
Salin selepas log masuk

Menggunakan Kelas vector2

Walaupun pendekatan yang dinyatakan di atas tidak memerlukan kelas vector2, ia boleh menyelaraskan kod anda dan menjadikannya lebih serba boleh. Untuk mendapatkan maklumat lanjut tentang menggunakan kelas vector2, rujuk dokumentasi vector2 PyGame atau cari tutorial dalam talian.

Atas ialah kandungan terperinci Bagaimana untuk Menghalang Bola daripada Melarikan Diri dari Dinding dalam PyGame Atari Breakout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan