2015-05-29 2 views
1

У меня есть два спрайта в классе для более легкого управления (в частности: танковая башня и подвеска). Если я пытаюсь запустить программу, она работает без ошибок, но ничего не показывает. Я также попытался поставить оба спрайтов в группе в классе, но он бросил ошибкуPygame: Показывать спрайт без группы

TypeError: draw() missing 1 required positional argument: 'surface' 

Код:

class Bokstelis(pygame.sprite.Sprite): 
    def __init__(self,atvaizdas,centerx,centery,sukgreitis): 
     pygame.sprite.Sprite.__init__(self) 
     self.nuotr=pygame.image.load(atvaizdas) 
     self.image=self.nuotr 
     self.rect=self.image.get_rect() 
     self.rect.centerx=centerx 
     self.rect.centery=centery 
     self.sukgreitis=sukgreitis 
     self.kryptis=0 
    def update(self): 
     mouseX, mouseY=pygame.mouse.get_pos() 
     self.angle = math.degrees(math.atan2(mouseY - self.rect.centery, mouseX - self.rect.centerx)) 
     orig_rect=self.rect 
     if self.angle - self.kryptis <self.sukgreitis: 
      self.image=pygame.transform.rotate(self.nuotr,-(self.sukgreitis+self.kryptis)) 
     elif self.angle - self.kryptis >self.sukgreitis: 
      self.image=pygame.transform.rotate(self.nuotr,self.sukgreitis+self.kryptis) 
     else: 
      self.image=pygame.transform.rotate(self.nuotr,-angle) 
     self.rect=self.image.get_rect() 
     self.rect.center=orig_rect.center 
     self.kryptis=self.angle 
class Pagrindas(pygame.sprite.Sprite): 
    def __init__(self,atvaizdas,centerx,centery,sukgreitis): 
     pygame.sprite.Sprite.__init__(self) 
     self.nuotr=pygame.image.load(atvaizdas) 
     self.image=self.nuotr 
     self.rect=self.image.get_rect() 
     self.rect.centerx=centerx 
     self.rect.centery=centery 
     self.sukgreitis=-sukgreitis 
     self.kryptis=0 
    def suktis(self): 
     orig_rect=self.rect 
     self.image=pygame.transform.rotate(self.nuotr,-sukgreitis) 
     self.rect=self.image.get_rect() 
     self.rect.center=orig_rect.center 
     self.kryptis-=kryptis 
class Tankas: 
    def __init__(self,centerx,centery,bokstelis,pagrindas,maxjudgreit,galingumas,svoris): 
     self.bokstelis=bokstelis 
     self.pagrindas=pagrindas 
     self.centerx=centerx 
     self.centery=centery 
     self.bokstelis.rect.center=(self.centerx,self.centery) 
     self.pagrindas.rect.center=(self.centerx,self.centery) 
     self.grup=pygame.sprite.Group(self.bokstelis,self.pagrindas) 
     self.maxjudgreit=maxjudgreit 
     self.galing=galingumas 
     self.svoris=svoris 
     self.judejimas=0 
     self.kryptis=self.pagrindas.kryptis 
     self.greit=False 
     self.maxdabgreit=72 
    def update(self): 
     self.centerx,selfcentery=self.judejimas * math.cos(math.radians(self.kryptis)), self.judejimas * math.sin(math.radians(self.kryptis)) 
     self.bokstelis.rect.center=(self.centerx,self.centery) 
     self.pagrindas.rect.center=(self.centerx,self.centery) 
     self.bokstelis.update() 
     self.pagrindas.update() 
     if self.maxdabgreit < self.judejimas: 
      selfjudėjimas-=self.galing/self.svoris 
     elif self.greit: 
      self.judejimas=self.judejimasself.galing/self.svoris 

Для добавления класса я добавил «self.grup (self.bokstelis, сам .pagrindas)»в __init__ и изменил self.bokstelis.update() и self.pagrindas.update() с

self.grup.clear() 
self.grup.update() 
self.grup.draw() 

полного EROR электронного письмом:

Traceback (most recent call last): 
    File "C:\Users\Kiela\Dropbox\IK8\IK3\World of Tankz.py", line 76, in <module> 
    tankas.grup.draw() 
TypeError: draw() missing 1 required positional argument: 'surface' 

Что делать для отображения моего бачка без отключения моего класса?

ответ

0

pygame.sprite.Group.draw() требует необязательного аргумента «поверхность». Если вы bliting прямо на экран (screen = pygame.display.set_mode()) вы: self.grup.draw(screen) Ваша другая альтернатива, чтобы сделать поверхность и Blit, что на экране:

screen = pygame.display.set_mode((0, 0)) # Create the main window 
#Create the sprites and groups etc. 
... 

surface = pygame.Surface(screen.get_size) 
self.grup.draw(surface) 
screen.blit(surface) 
pygame.display.flip() 

, но это сложнее из двух. Если вы хотите получить это прямо из документов, вы можете найти здесь: https://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Group.draw

Смежные вопросы