在 Pygame 中,我们经常会使用 sprite 来创建游戏中的各种对象。sprite 是 Pygame 中的一个类,它可以帮助我们管理游戏中的对象。我们可以通过继承 sprite 类来创建自己的对象。
在下面的代码中,我们创建了一个名为 Powup 的对象。Powup 对象继承了 sprite 类。Powup 对象有一个 last_true 属性,该属性记录了上次对象状态为 true 的时间。
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
在 Powup 对象的 update 方法中,我们使用了一个 if 语句来检查对象的状态。如果对象的状态为 true,则我们执行一些操作。否则,我们执行其他操作。
但是,当我们运行程序时,我们遇到了一个错误:
AttributeError: 'Powup' object has no attribute 'last_true'
这个错误意味着 Powup 对象没有 last_true 属性。这很奇怪,因为我们在 Powup 对象的初始化方法中已经定义了 last_true 属性。
2、解决方案
这个问题的原因是,我们在 Powup 对象的初始化方法中注释掉了 self.last_true = pg.time.get_ticks() 这行代码。这行代码的作用是将 last_true 属性设置为当前时间。如果没有这行代码,last_true 属性将始终为 None。
因此,为了解决这个问题,我们需要取消对 self.last_true = pg.time.get_ticks() 这行代码的注释。
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
现在,当我们运行程序时,错误消失了。