PyGame을 사용하여 공이 벽에서 튕겨 나가게 만들기
PyGame에서 Atari Breakout을 만드는 동안 공이 벽에서 튕겨 나가는 것과 관련된 질문은 다음을 사용하여 해결할 수 있습니다. 중첩 루프. 그러나 보다 효율적인 접근 방식을 위해서는 애플리케이션 루프를 지속적으로 사용하는 것이 좋습니다. 향상된 솔루션은 다음과 같습니다.
문제 이해 및 해결
코드의 문제는 여러 개의 중첩 루프를 사용하는 데서 발생합니다. 이 문제를 해결하려면 애플리케이션 루프 내에서 공을 계속 이동하십시오.
box.y -= box.vel_y box.x += box.vel_x
공의 영역 정의
공의 직사각형 영역을 정의하려면 파이게임을 사용하세요. .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>
벡터2 클래스 사용
앞서 언급한 접근 방식에는 벡터2 클래스가 필요하지 않지만 코드를 간소화하고 더욱 다양하게 만들 수 있습니다. vector2 클래스 사용에 대한 자세한 내용은 PyGame의 vector2 문서를 참조하거나 온라인 튜토리얼을 검색하세요.
위 내용은 PyGame Atari Breakout에서 공이 벽을 벗어나는 것을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!