파이 게임에서 퐁을 만들고 있는데 문제가 있습니다. 공이 패들과 충돌하면 공이 계속 붙어 있습니다. Heres 코드, 나는 wheres 문제를 파악할 수 없습니다.파이 게임의 퐁 : 볼이 바운스하지 않습니다.
기본 파일 : 공
import pygame as py
import game_functions as gf
from game_objects import Platform, Platform2, Ball
from settings import Settings
def run_game():
py.init()
ai_settings = Settings()
screen = py.display.set_mode((
ai_settings.screen_width, ai_settings.screen_height
))
py.display.set_caption('Pong')
platform = Platform(ai_settings, screen)
platform2 = Platform2(ai_settings, screen)
ball = Ball(ai_settings, screen)
while True:
gf.check_events(platform, platform2, ball)
platform.update(), platform2.update(), ball.update()
gf.collide_check(ball, platform, platform2, ai_settings)
gf.update_screen(ai_settings, screen, platform, platform2, ball)
run_game()
클래스 :
def collide_check(ball, platform, platform2, ai_settings):
if ball.rect.colliderect(platform.rect):
ball.rect.centerx += ai_settings.ball_speed
elif ball.rect.colliderect(platform2.rect):
ball.rect.centerx -= ai_settings.ball_speed
덕분에 도움을 많이 :/
여기class Ball:
def __init__(self, ai_settings, screen):
self.ai_settings = ai_settings
self.screen = screen
self.screen_rect = screen.get_rect()
self.image = py.image.load('pics/ball.png')
self.rect = self.image.get_rect()
self.rect.centerx = self.screen_rect.centerx
self.rect.centery = self.screen_rect.centery
self.moving = False
def update(self):
if self.moving:
self.rect.centerx -= self.ai_settings.ball_speed
def draw_ball(self):
self.screen.blit(self.image, self.rect)
및 변화 방향에 대한 기능입니다
PS 이동 플래그 self.moving
은 패들 이동 키가 눌러져 있으면 True로 변경됩니다.
코드가 완전하지 않으므로 'update'는 항상 볼의 속도를 뺀 것처럼 보이므로 한 방향으로 만 이동합니다. 'platform'이 충돌하는 경우 ball_speed가 추가됩니다. 그러나 다음 update는 다시 빼기 만하면됩니다. 디버거가있는 많은 무료 Python IDE가 있으므로 코드를 단계별로 실행하고 논리를 살펴볼 수 있습니다. X 좌표와 Y 좌표가 바뀌는 지 확인하십시오. –
문제를 재현하려면 최대한 많은 코드를 제거하십시오. 디버깅이 쉬워집니다. 또한 문제의 일부인 코드를 포함해야합니다 (이 경우'ai_settings.ball_speed'). 코드는 테스트 할 수 있어야하며 들여 쓰기가 정확하고 문제를 재현하는 데 필요한 코드가 제공되어야합니다. 또한 pygame을 py로 가져 오는 이유는 무엇입니까? 코드가 훨씬 모호 해지고 많은 타이핑을 저장하지 않습니다. 그것은 긴 이름을 가진 당신의 자신의 모듈을 위해 이해할 수 있습니다. –