我试图用一个模型来编写一个游戏,但是我得到了一个错误:
"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'" 在运行script.If时,我不调用脚本运行的冲突函数,因此在这个函数中是错误的,但我不知道mistake.Here在哪里是函数的代码:
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()如果需要,我将从我的Ship_laser文件中发布classes.py类
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考虑到Laser.ship类--它继承了pygame.sprite.Sprite类--我不理解error.This是我第一个game.Please帮助
发布于 2014-08-11 20:43:05
我不能说我是游戏专家,我也不完全理解你是如何建立你的课程的。当我听到ship激光时,我想到一个属于ship的实例,但是在您的类中,您定义了"allsprites“,它是可变类型,定义为一个类实例(由类的所有成员共享)。
但是,考虑到这一点,所有的精灵都将是ship_laser之间共享的同一个可变对象,几乎就像您类的黄页一样。当您调用pygame.sprite.spritecollide (基于pygame )时,它正在寻找sprite.Group,因此您应该传递给它组查找(黄页,也就是所有的精灵),而不是对类的引用。这应该能解决你的问题。下面是您的代码更改:
enemy_laser = pygame.sprite.spritecollide(enemy_ship, classes.Ship_laser, True)至
enemy_laser = pygame.sprite.spritecollide(enemy_ship, classes.Ship_laser.allsprites, True)https://stackoverflow.com/questions/25251627
复制相似问题