我正在尝试使用模型编写游戏,但我收到错误:
"File "C:\Python27\lib\site-packages\pygame\sprite.py", line 1514, in spritecollide
for s in group.sprites():AttributeError: type object 'Ship_laser' has no attribute 'sprites'"
当运行脚本时。如果我没有调用我的碰撞功能,那么脚本会运行,因此该函数是错误的,但我不明白错误在哪里。这是函数的代码:
def collisions():
for enemy_ship in classes.Enemy_ship.List:
enemy_laser = pygame.sprite.spritecollide(enemy_ship, classes.Ship_laser, True)
if len(enemy_laser) > 0:
for hit in enemy_laser:
enemy_ship.health -= 25
for laser in classes.Ship_laser.List:
if pygame.sprite.spritecollide(laser, enemy_ship, True):
laser.destroy()
如果需要,我将从classes.py文件中发布Ship_laser类
class Ship_laser(pygame.sprite.Sprite):
allsprites = pygame.sprite.Group()
def __init__(self, x, y, image_string):
pygame.sprite.Sprite.__init__(self)
Ship_laser.allsprites.add(self)
self.image = pygame.image.load(image_string)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.velx, self.vely = 0, 0
@staticmethod
def laser_movement(SCREENWIDTH, SCREENHEIGHT):
for laser in Ship_laser.List:
laser.rect.x += laser.velx
laser.rect.y += laser.vely
def destroy(self):
Ship_laser.List.remove(self)
del self
考虑到它继承了pygame.sprite.Sprite类的Laser.ship类,我不明白错误。这是我的第一个游戏。请帮忙
答案 0 :(得分:0)
我不能说我是pygame的专家,也不完全理解你是如何构建类的。当我听到船舶激光时,我想到了一个属于船舶的单个实例,但在你的类中你定义了“allsprites”,它是一个为类实例定义的可变类型(由类的所有成员共享)。
但是考虑到这一点,所有的精灵都将是在ship_laser之间共享的同一个可变对象,几乎就像你班级的黄页一样。当你调用pygame.sprite.spritecollide(基于pygame文档)时,它正在寻找sprite.Group,因此,你应该将它传递给组查找(yellowpages又名allsprites),而不是对类的引用。这应该排序你的问题。所以,这是你的代码更改:
enemy_laser = pygame.sprite.spritecollide(enemy_ship, classes.Ship_laser, True)
到
enemy_laser = pygame.sprite.spritecollide(enemy_ship, classes.Ship_laser.allsprites, True)