2017-08-07 3 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() 

マスクを取得しようとするとエラーが発生しますが、引数1はpygame.surfaceであり、pyganimationでなければなりません。 私はマスクを得るために多くの方法を試してみましたが、トレースバックは、あなたがpygame.mask.from_surfacepygame.Surfaceを渡すために持っていると言うが、self.imagePygAnimation対象でない表面であるため、すべての努力が無駄pyganimからマスクを取得できません

答えて

0

を証明しています。 self.image.getCurrentFrame()を呼び出して、アニメーションの現在のフレーム(pygame.Surface)を取得できます。

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

また、継続時間はミリ秒単位なので、50のような高いものに.08を変更します。

+0

スプライトグループでPlayerスプライトを使用することはできません。その 'self.image'属性は' pygame.Surface'でなければならないと思いますので、アニメーションを 'self.animation'として保存してからアップデートします'update'メソッドのスプライトの' self.image'です。 – skrx

+0

ありがとうございました。うまく働いた – PopeSkinnyprograms

+0

あなたは大歓迎です。 upvoteして答えを受け入れる、それはあなたにもいくつかのポイントを与えるでしょう。 – skrx

関連する問題