2016-05-14 97 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