首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碰撞检测错误:AttributeError:类型对象'Ship_laser‘没有属性’no‘

碰撞检测错误:AttributeError:类型对象'Ship_laser‘没有属性’no‘
EN

Stack Overflow用户
提问于 2014-08-11 20:14:10
回答 1查看 221关注 0票数 1

我试图用一个模型来编写一个游戏,但是我得到了一个错误:

代码语言:javascript
复制
 "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在哪里是函数的代码:

代码语言:javascript
复制
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类

代码语言:javascript
复制
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帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-11 20:43:05

我不能说我是游戏专家,我也不完全理解你是如何建立你的课程的。当我听到ship激光时,我想到一个属于ship的实例,但是在您的类中,您定义了"allsprites“,它是可变类型,定义为一个类实例(由类的所有成员共享)。

但是,考虑到这一点,所有的精灵都将是ship_laser之间共享的同一个可变对象,几乎就像您类的黄页一样。当您调用pygame.sprite.spritecollide (基于pygame )时,它正在寻找sprite.Group,因此您应该传递给它组查找(黄页,也就是所有的精灵),而不是对类的引用。这应该能解决你的问题。下面是您的代码更改:

代码语言:javascript
复制
enemy_laser = pygame.sprite.spritecollide(enemy_ship, classes.Ship_laser, True)

代码语言:javascript
复制
enemy_laser = pygame.sprite.spritecollide(enemy_ship, classes.Ship_laser.allsprites, True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25251627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档