2017-08-07 1 views
1
import pygame, PygAnimation 
screen = pygame.display.set_mode((500,500)) 
class Player(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = PygAnimation([("png/Attack__000.png",.08), ("png/Attack__001.png",.08),("png/Attack__002.png",.08), 
      ("png/Attack__003.png",.08),("png/Attack__004.png",.08),("png/Attack__005.png",.08),],True) 
    def update(self): 
     self.image.play() 
     self.mask = pygame.mask.from_surface(self.image) 

    def draw(self): 
     self.image.blit(screen,(100,100)) 

p = Player() 


running = True 

while running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 

    screen.fill((255,255,255)) 

    p.draw() 
    p.update() 
    pygame.display.update() 

Je continue d'obtenir des erreurs en essayant d'obtenir le masque qu'il dit argument 1 doit être pygame.surface pas pyganimation. J'ai essayé plusieurs façons d'obtenir des masques, mais tous les efforts ont été vainesImpossible d'obtenir le masque de pyganim

Répondre

0

Comme le retraçage dit que vous devez passer un pygame.Surface à pygame.mask.from_surface, mais le self.image est un objet PygAnimation pas une surface. Vous pouvez obtenir l'image actuelle (pygame.Surface) de l'animation en appelant le self.image.getCurrentFrame().

self.mask = pygame.mask.from_surface(self.image.getCurrentFrame()) 

En outre, les durées sont en millisecondes, donc changer .08 à quelque chose de plus comme 50.

+0

Je pense que vous ne pouvez pas utiliser votre sprite Player dans un groupe d'images-objets parce que son attribut 'self.image' devrait être un' pygame.Surface', donc je stockerais l'animation en tant que 'self.animation' et je mettrais à jour le 'self.image' de l'image-objet dans la méthode' update'. – skrx

+0

Merci beaucoup. A bien fonctionné – PopeSkinnyprograms

+0

De rien. S'il vous plaît upvote et accepter la réponse, cela vous donnera aussi quelques points. – skrx