Pygame, livewires: Attribute error: Message object has no attribute 'handle collide'
Pygame, livewires: Attribute error: Message object has no attribute 'handle collide'
我正在使用 Python 绝对初学者编程 中的特殊 'pygame' 和 'livewires' 制作游戏,并且运行良好好吧,在大多数情况下。在您可以玩游戏的那一刻,计时器会滴答作响,然后当尖刺击中您时,文本 'Lose! Time:' 然后您到达的任何时间都会出现。然而,尽管消息的生命周期为 300,消息在屏幕关闭时持续不到一秒,您会看到此错误:
Traceback (most recent call last):
File "run.py", line 105, in main
games.screen.mainloop()
File "C:\Python31\lib\site-packages\livewires\games.py, line 308, in mainloop
object._tick()
File "C:\Python31\lib\site-packages\livewires\games.py", live 506, in _tick
self.update()
File "run.py", line 27, in update
self.check_collide()
File "run.py", line 34, in check_collide
spike.handle_collide()
AttributeError: 'Message' object has no attribute 'handle_collide'
哇哦。这是相关代码(根据我的判断):
class Player(games.Sprite):
"""The player that must dodge the spikes."""
def __init__(self, image, x, y):
super().__init__(image=image, x=x, y=y)
"""
Timer
"""
self.timer = games.Text(value = 0,
size = 40,
color = color.black,
x = 600,
y = 440)
games.screen.add(self.timer)
def update(self):
"""Move to the mouse."""
self.x = games.mouse.x
self.y = games.mouse.y
self.check_collide()
self.timer.value = int(time.clock())
def check_collide(self):
"""Check for a collision with the spikes."""
for spike in self.overlapping_sprites:
spike.handle_collide()
class Spike(games.Sprite):
"""A spike!"""
def update(self):
"""Move to the left!"""
self.x -= random.randrange(3,12)
if self.x == 0 or self.x == 1 or self.x == 2 or self.x == 3 or self.x == 4 or self.x == 5 or self.x == 6 or self.x < 10:
self.x = 640
self.y = random.randrange(games.screen.height)
def handle_collide(self):
"""Destroy!"""
timebomb = int(time.clock())
man = ("Lose! Time:",timebomb)
lost_message = games.Message(value = man,
size = 100,
color = color.red,
x = games.screen.width/2,
y = games.screen.height/2,
lifetime = 300,
after_death = games.screen.quit)
games.screen.add(lost_message)
我很困惑。应该调用方法 handle_collide
以便游戏可以完成,但似乎东西 handle_collide 是对象消息的属性?如果这看起来很愚蠢,那么抱歉,因为我已经尽了最大的努力,正如书名所暗示的那样,我是一个菜鸟。请帮助,提前致谢。
已找到修复程序。
def check_collide(self):
"""Check for a collision with the spikes."""
for spike in self.overlapping_sprites:
spike.handle_collide()
for 循环中的 'spike' 只是与玩家发生碰撞的任何东西的名称。实际发生的是玩家正在与 'Message' 对象发生碰撞,然后询问消息对象处理精灵碰撞的方式。消息对象未准备好,也没有“handle_collide”方法来处理此问题。所以它会抛出一个错误。要修复它,您只需将文本从播放器移开,或者使用 'Message' 对象并创建 for 循环所期望的方法。
我正在使用 Python 绝对初学者编程 中的特殊 'pygame' 和 'livewires' 制作游戏,并且运行良好好吧,在大多数情况下。在您可以玩游戏的那一刻,计时器会滴答作响,然后当尖刺击中您时,文本 'Lose! Time:' 然后您到达的任何时间都会出现。然而,尽管消息的生命周期为 300,消息在屏幕关闭时持续不到一秒,您会看到此错误:
Traceback (most recent call last):
File "run.py", line 105, in main
games.screen.mainloop()
File "C:\Python31\lib\site-packages\livewires\games.py, line 308, in mainloop
object._tick()
File "C:\Python31\lib\site-packages\livewires\games.py", live 506, in _tick
self.update()
File "run.py", line 27, in update
self.check_collide()
File "run.py", line 34, in check_collide
spike.handle_collide()
AttributeError: 'Message' object has no attribute 'handle_collide'
哇哦。这是相关代码(根据我的判断):
class Player(games.Sprite):
"""The player that must dodge the spikes."""
def __init__(self, image, x, y):
super().__init__(image=image, x=x, y=y)
"""
Timer
"""
self.timer = games.Text(value = 0,
size = 40,
color = color.black,
x = 600,
y = 440)
games.screen.add(self.timer)
def update(self):
"""Move to the mouse."""
self.x = games.mouse.x
self.y = games.mouse.y
self.check_collide()
self.timer.value = int(time.clock())
def check_collide(self):
"""Check for a collision with the spikes."""
for spike in self.overlapping_sprites:
spike.handle_collide()
class Spike(games.Sprite):
"""A spike!"""
def update(self):
"""Move to the left!"""
self.x -= random.randrange(3,12)
if self.x == 0 or self.x == 1 or self.x == 2 or self.x == 3 or self.x == 4 or self.x == 5 or self.x == 6 or self.x < 10:
self.x = 640
self.y = random.randrange(games.screen.height)
def handle_collide(self):
"""Destroy!"""
timebomb = int(time.clock())
man = ("Lose! Time:",timebomb)
lost_message = games.Message(value = man,
size = 100,
color = color.red,
x = games.screen.width/2,
y = games.screen.height/2,
lifetime = 300,
after_death = games.screen.quit)
games.screen.add(lost_message)
我很困惑。应该调用方法 handle_collide
以便游戏可以完成,但似乎东西 handle_collide 是对象消息的属性?如果这看起来很愚蠢,那么抱歉,因为我已经尽了最大的努力,正如书名所暗示的那样,我是一个菜鸟。请帮助,提前致谢。
已找到修复程序。
def check_collide(self):
"""Check for a collision with the spikes."""
for spike in self.overlapping_sprites:
spike.handle_collide()
for 循环中的 'spike' 只是与玩家发生碰撞的任何东西的名称。实际发生的是玩家正在与 'Message' 对象发生碰撞,然后询问消息对象处理精灵碰撞的方式。消息对象未准备好,也没有“handle_collide”方法来处理此问题。所以它会抛出一个错误。要修复它,您只需将文本从播放器移开,或者使用 'Message' 对象并创建 for 循环所期望的方法。