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
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
atau
bounds = pygame.Rect(450, 200, 300, 200) # rectangular region
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
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>
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!