2016-05-14 57 views
0
class Powup(pg.sprite.Sprite): 
    def __init__(self,x ,y ,color): 
     pg.sprite.Sprite.__init__(self) 
     self.image = pg.Surface((10,10)) 
     self.image.fill(color) 
     self.rect = self.image.get_rect() 
     self.rect.centerx = x 
     self.rect.centery = y 
     self.vx = 0 
     self.vy = 0 
     self.state = False 
     self.power = 1 
     self.timeout = 5000 
     #self.last_true = pg.time.get_ticks() 




    def update(self): 

     if p.rect.left < self.rect.centerx < p.rect.right and self.rect.bottom >= 560: 
      self.kill() 
      self.last_true = pg.time.get_ticks() 
      self.state = True 
      p.image.fill(red) 

     if (pg.time.get_ticks() - self.last_true) > 5000 : 
      p.image.fill(black) 
      self.state = False 



     self.rect.y += self.vy 

當我運行該程序,它說對象錯誤

如果(pg.time.get_ticks() - self.last_true)> 5000: AttributeError的: 'Powup' 對象有沒有屬性' last_true'

這對我來說沒有任何意義。有人可以向我解釋這個嗎?

+0

即使您取消註釋您設置的行嗎? – Roberto

回答

1

你有「self.last_true = pg.time.get_ticks()」註釋在你的對象初始化。如果更新中的第一個if語句爲false,則它永遠不會被正確設置爲在第二個if語句中進行測試。因此,你正在測試你從未設置的東西的價值。

+0

是的,我測試了,我看到了。但是我希望pg.time.get_ticks()在第一個if語句爲True時啓動,你能建議什麼嗎? – Aris

+0

如果你在開始設置「self.last_true」之前等待該語句爲true,則必須等待第二次if語句隱藏在第一次語句爲true時第一次翻轉的bool切換點後面。 – oxrock

0

通過對其他答案的評論,你可能會這樣做,並忽略它,如果有錯誤。

def update(self): 

    if p.rect.left < self.rect.centerx < p.rect.right and self.rect.bottom >= 560: 
     self.kill() 
     self.last_true = pg.time.get_ticks() 
     self.state = True 
     p.image.fill(red) 

    try: 
     if (pg.time.get_ticks() - self.last_true) > 5000 : 
      p.image.fill(black) 
      self.state = False 
    except AttributeError: 
     pass 


    self.rect.y += self.vy