2013-09-12 2 views
1

Я пишу простой учебник Pygame для предстоящей книги, и я как бы заблокирован в этой проблеме здесь. У меня есть два класса: мяч (бола) и весло (raquete). Мяч спрайт приходит из образа и его класс достаточно прост:Pygame - Получение прямоугольника для динамически нарисованного объекта

class bola(pygame.sprite.Sprite): 

    def __init__(self, x, y, imagem_bola): 
     pygame.sprite.Sprite.__init__(self) 
     self.x = x 
     self.y = y 
     self.image = pygame.image.load(imagem_bola) 
     self.rect = self.image.get_rect() 

    def imprime(self): 
     cenario.blit(self.image, (self.x, self.y)) 

ракетки, однако, получает обращаются динамически его высота и ширина передаются в качестве параметров.

class raquete(pygame.sprite.Sprite): 

    def __init__(self, x, y, l_raquete, a_raquete): 
     pygame.sprite.Sprite.__init__(self) 
     self.x = x 
     self.y = y 
     self.l_raquete = l_raquete 
     self.a_raquete = a_raquete 
     self.image = pygame.draw.rect(cenario, branco, (self.x, self.y, self.l_raquete, self.a_raquete)) 
     self.rect = self.image.get_rect() # this doesn't work! 

    def imprime(self): 
     pygame.draw.rect(cenario, branco, (self.x, self.y, self.l_raquete, self.a_raquete)) 

Как вы можете видеть, моя попытка загрузить self.image с

pygame.draw.rect(cenario, branco, self.x, self.y, self.l_raquete, self.a_raquete)) 

, а затем получить rect с помощью self.rect = self.image.get_rect() просто не работает.

Конечно, так как я не могу получить rect для raquete, столкновения также не работают.

Все советы приветствуются!

ответ

1

Просто создайте новый Surface и заполнить его с правым цветом:

class raquete(pygame.sprite.Sprite): 

    def __init__(self, x, y, l_raquete, a_raquete): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.Surface((l_raquete, a_raquete)) 
     # I guess branco means color 
     self.image.fill(branco) 
     # no need for the x and y members, 
     # since we store the position in self.rect already 
     self.rect = self.image.get_rect(x=x, y=y) 

Поскольку вы уже используете Sprite класс, что точка функции imprime так или иначе? Просто используйте pygame.sprite.Group, чтобы нарисовать спрайты на экране. Тем не менее, rect член Sprite используется для позиционирования, так что вы можете упростить bola класс:

class bola(pygame.sprite.Sprite): 

    def __init__(self, x, y, imagem_bola): 
     pygame.sprite.Sprite.__init__(self) 
     # always call convert() on loaded images 
     # so the surface will have the right pixel format 
     self.image = pygame.image.load(imagem_bola).convert() 
     self.rect = self.image.get_rect(x=x, y=y) 
+0

Спасибо, Доминик! Поверхность делает трюк. Я все еще задаюсь вопросом, есть ли способ получить выход из объекта, построенного с помощью pygame.draw ... –