检查组中每个sprite的碰撞 - >属性错误

时间:2013-06-08 18:08:25

标签: python-3.x pygame

我想检查精灵组中的哪个对象与另一个对象发生碰撞,然后在该位置创建一个新的精灵(如爆炸)。

在while循环中,我移动对象,然后检查碰撞。

if not game_over:
    move_coins()
    move_pointer()
    if pygame.sprite.spritecollideany(pointer, coin_group):
        print_text(pygame.font.Font(None,16), 0, 0, "Collision!")
        check_collision()

此处的碰撞成功,因为它将文本打印到屏幕上。然后继续check_collision()。

def check_collision():
    for coin in coin_group:
        if pygame.sprite.collide_rect(coin, pointer):
            create_newcoin()

def create_newcoin():
    bcoin = Coin()
    bcoin.load("coin1s.png", 32, 32, 1)
    bcoin.position = 0,0 
    collected_group.add(bcoin)

create_newcoin()函数在check_collision()之外正常工作,但是当它在这个循环中运行时,我得到一个属性错误。

Coin() has no attribute 'image'

有人可以解释为什么我会收到此错误以及我需要做些什么才能修复它?如果有必要,我可以提供更多代码,但我认为我已将其缩小到此部分,从而导致错误。感谢。


呃,我只是粘贴我正在使用的代码。 http://pastebin.com/TuAZxUkqhttp://pastebin.com/kmYytiYV

错误:

Traceback (most recent call last):
    File "C:\Users\User\Desktop\Coins!\Coins!.py", line 129, in <module>
        collected_group.draw(screen)
    File "C:\Python32\lib\site-packages\pygame\sprite.py", line 475, in draw
        self.spritedict[spr] = surface_blit(spr.image, spr.rect)
AttributeError: 'Coin' object has no attribute 'image'

1 个答案:

答案 0 :(得分:0)

pygame.sprite.Group.draw()pygame.sprite.Group.update() 是由 pygame.sprite.Group 提供的方法。

前者将 委托给包含的 pygame.sprite.Spritesupdate 方法 - 您必须实现该方法。见pygame.sprite.Group.update()

<块引用>

对组中的所有 Sprite 调用 update() 方法 [...]

后者使用包含的 imagerectpygame.sprite.Sprite 属性来绘制对象 - 您必须确保 pygame.sprite.Sprite 具有所需的属性。见pygame.sprite.Group.draw()

<块引用>

将包含的精灵绘制到 Surface 参数。这对源表面使用 Sprite.image 属性和 Sprite.rect。 [...]

Coin 子类 MySpriteMySprite 是一个属性 master_image,但没有属性 image。因此,调用 pygame.sprite.Group.draw() 将导致错误:

<块引用>

Coin() 没有属性 'image'

只需将 mater_image 重命名为 image 即可解决问题:

class MySprite(pygame.sprite.Sprite):

    def load(self, filename, width=0, height=0, columns=1):
        self.set_image(image e, width, height, columns)
 
    def set_image(self, image, width=0, height=0, columns=1):
        self.image = image
        # [...]