저는 현재 마스크와 collide_rect 함수를 사용하여 퐁볼과 플레이어의 패들 사이의 완벽한 충돌을하려고합니다. 나는 완벽한 완벽한 충돌을 검사 할 pong 클래스에서 자체 checkCollision 함수를 만들었습니다. 그러나 지금은 "Pong 객체가 반복 가능하지 않기 때문에 Sprite가 작동하거나 화면에 표시되지 않습니다."회전 된 개체와 스프라이트가 나타나고 충돌하는 문제가 발생합니다. 파이 게임 객체가 반복 가능하지 않습니다
다음은 중요한 기능이 포함 된 내 pong 클래스입니다.
데프 주() :. 내 PlayerPaddle 클래스에서)
class Pong(pygame.sprite.Sprite):
def __init__(self, screensize):
pygame.sprite.Sprite.__init__(self)
self.screensize = screensize
self.centerx = screensize[0] // 2
self.centery = screensize[1] // 2
self.radius = 25
self.rect = pygame.Rect(self.centerx-self.radius,
self.centery-self.radius,
self.radius*2, self.radius*2)
self.pokeimage = pygame.image.load("pokeball.png")
self.pokeimage = pygame.transform.scale(self.pokeimage, (self.radius, self.radius))
#Create the mask
self.mask = pygame.mask.from_surface(self.pokeimage)
def checkCollision(self, player_paddle, ai_paddle):
col = pygame.sprite.collide_rect(self, player_paddle)
return col
def collisionFormula(self, player_paddle, ai_paddle):
if self.checkCollision(self, player_paddle):
def collision_checks(self, player_paddle, ai_paddle):
#if the ball hits the top or bottom of the screen, change the y direction
if self.rect.top <= 0 or self.rect.bottom >= self.screensize[1] - 1:
self.direction[1] *= -1
#if the pong hits the paddles, change how the pong ball moves
if self.rect.colliderect(player_paddle.rect) or self.rect.colliderect(ai_paddle.rect):
self.collisionFormula(player_paddle, ai_paddle)
def update(self, player_paddle, ai_paddle):
self.update_ball_position()
self.reset_ball()
self.collision_checks(player_paddle, ai_paddle)
필요, 나는 나의 주요 기능은 여기
class PlayerPaddle(pygame.sprite.Sprite):
def __init__(self, screensize):
pygame.sprite.Sprite.__init__(self)
self.screensize = screensize
self.centerx = 50
self.centery = screensize[1]//2
self.height = 100
self.width = 20
self.imageMaster = pygame.image.load("naruto.png").convert_alpha()
self.imageMaster = pygame.transform.scale(self.imageMaster, (self.width, self.height))
self.image = self.imageMaster
#mask
self.mask = pygame.mask.from_surface(self.image)
def turnLeft(self):
self.dir += 45
if self.dir > 360:
self.dir = 45
def turnRight(self):
self.dir -= 45
if self.dir < 0:
self.dir = 315
def update(self):
#Rotate functions
oldCenter = self.rect.center
self.image = pygame.transform.rotate(self.imageMaster, self.dir)
self.rect = self.image.get_rect()
self.rect.center = oldCenter
을 같은 마스크 초기화를 그리고pygame.init는()
screensize = (640,700)
screen = pygame.display.set_mode(screensize)
background = pygame.Surface(screen.get_size())
background.fill((0, 255, 0))
clock = pygame.time.Clock()
pong = Pong(screensize)
player_paddle = PlayerPaddle(screensize)
ai_paddle = AIPaddle(screensize)
paddleSprite = pygame.sprite.Group(player_paddle)
pongSprite = pygame.sprite.Group(pong)
while running:
running = True
#object updating phase
ai_paddle.update(pong, player_paddle)
player_paddle.update()
pong.update(player_paddle, ai_paddle)
if pygame.sprite.spritecollide(player_paddle, pong, False, pygame.sprite.collide_mask):
print("Collided")
#rendering phase
ai_paddle.render(screen)
player_paddle.render(screen)
pong.render(screen)
paddleSprite.clear(screen, background)
paddleSprite.update()
paddleSprite.draw(screen)
pongSprite.clear(screen,background)
pongSprite.update()
pongSprite.draw(screen)
pygame.display.flip()
pygame.quit()
main()
나는이 "그룹"오브젝트 (퐁과 player_paddle)을했지만 나는 심지어 프로그램을 실행하는 데 실패하고있어 이유를 모르겠어요. 또한, 퐁 공이 원래 이미지의 사각형을 칠 수는 있지만 회전 된 이미지는 표시하지 않으므로 충돌이 작동하지 않는다는 것을 알고 있습니다. 그러나 스프라이트 함수를 사용하면 왜 그런 일이 일어날 지 잘 모르겠습니다. 감사.
spritecollide
Find sprites in a group that intersect another sprite.
spritecollide(sprite, group, dokill, collided = None) -> Sprite_list
두 번째 인수에 대한
은 전체 오류 메시지 (Traceback)를 문제의 텍스트로 표시합니다 (스크린 샷이 아님). 다른 유용한 정보가 있습니다. 즉. 어떤 코드 행이 문제가되는지를 보여줍니다. – furas
안녕하세요, 오류가 반환됩니다 [충돌하는 경우 그룹에 s (스프라이트,들)] TypeError : 'Pong'객체가 반복 가능하지 않습니다 – turtlefish12
QUESTION에 항상 FULL 오류가 발생했습니다. 더 읽기 쉬울 것입니다. – furas