2017-06-13 71 views
0

我试图做一个游戏。就像其他射击游戏一样,敌人在射击时应该消失。显然,你不能杀死表面,但你可以杀死精灵。所以我试图加载我的图像作为精灵,但我得到一个奇怪的错误。我创建该类,为其应用一个变量,为pygame.sprite.Group创建一个变量,并将该类变量添加到该组中。当我尝试更新组时,它说"'NoneType' object has no attribute 'update'"。下面是类代码:没有类型的对象没有属性更新

class Spawn(pygame.sprite.Sprite): 
    def __init__(self,primaryx,primaryy): 
     pygame.sprite.Sprite.__init__(self) 
     global directionM 
     self.directionM=directionM 
     x1=random.randint(100,400) 
     y1=random.randint(100,400) 
     self.x1=x1 
     self.y1=y1 
     self.primaryx=primaryx 
     self.primaryy=primaryy 
    def AIPrototype(self): 
     minionup=pygame.image.load("Alien.png").convert_alpha() 
     miniondown=pygame.image.load("Aliendown.png").convert_alpha() 
     minionleft=pygame.image.load("Alienleft.png").convert_alpha() 
     minionright=pygame.image.load("Alienright.png").convert_alpha() 
     global x,y,posx,posy 
     seperate=random.randint(1,1000) 
     screen.blit(self.directionM,(self.primaryx,self.primaryy)) 
     if seperate==2: 
      self.primaryx=x+100 
     if seperate==20: 
      self.primaryx=x-100 
     if seperate==150: 
      self.primaryy=y+100 
     if seperate==200: 
      self.primaryy=y-100 
     self.x1=self.primaryx 
     self.y1=self.primaryy 
     if self.x1<x: 
      xspeed1=1 
      slopex1=x-self.x1 
     if self.x1>x: 
      xspeed1=-1 
      slopex1=self.x1-x 
     if self.y1<y: 
      yspeed1=1 
      slopey1=y-self.y1 
     if self.y1>y: 
      yspeed1=-1 
      slopey1=self.y1-y  
    # 
     hypo1=((slopex1**2)+(slopey1**2))**0.5 
     speedmark1=hypo1/1 
     speedy1=slopey1/speedmark1 
     speedx1=slopex1/speedmark1 
     movex1=speedx1 
     movey1=speedy1 
     if self.x1<=640 and self.x1>=0: 
      if self.x1>x: 
       self.x1+=xspeed1*movex1 
       if self.x1<x: 
        xspeed1=0 
     if self.y1<=480 and self.x1>=0: 
      if self.y1>y: 
       self.y1+=yspeed1*movey1 
       if self.y1<y: 
        yspeed1=0 
     if self.x1<=640 and self.x1>=0: 
      if self.x1<x: 
       self.x1+=xspeed1*movex1 
       if self.x1>x: 
        xspeed1=0 
     if self.y1<=480 and self.x1>=0: 
      if self.y1<y: 
       self.y1+=yspeed1*movey1 
       if self.y1>y: 
        yspeed1=0 
    # 
     if self.x1>640: 
      self.x1=640 
     if self.x1<0: 
      self.x1=0 
     if self.y1>480: 
      self.y1=480 
     if self.y1<0: 
      self.y1=0 
     if self.y1>=posy-20 and self.y1<=posy+20 and self.x1>=x-20 and self.x1<=x+20: 
      Spawn.kill() 
     self.primaryx=self.x1 
     self.primaryy=self.y1 

而这正是游戏循环:

spritegroup=pygame.sprite.Group() 
spawn=Spawn(600,200) 
spritegroup=spritegroup.add(spawn) 
clock = pygame.time.Clock() 
keepGoing = True   

try: 
    while keepGoing: 
     clock.tick(60) 
     screen.fill(THECOLORS['red']) 
     char()#start 
     x+1 
     posxlist.append(x) 
     posylist.append(y) 
     spritegroup.update() 
     pygame.display.flip() 

我意识到,我的代码是非常的混乱,效率低下,而且我对此感到非常抱歉。我完全不熟悉使用类和精灵。

回答

2

spritegroup.add(spawn)返回None。不要将其指定回spritegroup,该操作将对象更改为

换句话说,这样做,而不是:

spritegroup = pygame.sprite.Group() 
spawn = Spawn(600,200) 
spritegroup.add(spawn) 

spritegroup.Group.add() documentation

精灵添加到这个集团
add(*sprites) - >None

+0

谢谢!我的错误消失了。但我遇到了另一个问题。有人告诉我说,更新团队会召唤班级,并展示敌人,但不会发生。 – Qartx

+0

@Qartx对不起,我对pygame不够了解,以帮助你进一步。 –

+0

感谢您的帮助。我只会为此发布另一个问题。 – Qartx

相关问题