为什么我的小组没有精灵属性?

时间:2019-09-12 22:05:06

标签: python pygame

我试图遍历小组中的小精灵,以便绘制它们。但是,我收到一条消息,说明该组没有sprite属性。

我试图在功能模块中声明组和精灵(出现错误),而不是主模块。那不行我尝试不使用sprite属性来执行此操作。那不行

   #Assign bullets sprite a value
   bullet = Bullet(screen, ship)
   #assign a group for bullets
   pewpew = Group()

这是项目符号类:

  import pygame
  from pygame.sprite import Sprite

  class Bullet():

      def __init__(self, screen, ship):
          """initiate the bullet sprite"""
          super(Bullet, self).__init__()
          self.screen = screen

          #Places everyone, places
          self.rect = pygame.Rect(0, 0, 3, 15)
          self.rect.centery = ship.rect.centery
          self.rect.top = ship.rect.top

          #Decimal and delightful colors!
          self.x = float(self.rect.x)
          self.color = 60, 60, 60

        def update(self):
         #almost faster than superman
          self.x =+ 5
          self.rect.x = self.x

         def draw_bullet(self):
          """Animate"""
           pygame.draw.rect(self.screen, self.color, self.rect)

在这里发生错误:

   def screenupdate(screen, rct, ship, bullet, pewpew):
         """Update screen images and flip to a new screen"""
         #Redraw screen for everytime the function loops
         screen.fill((230, 230, 230))
         #Redraw the bullets
         for bullet in pewpew.sprite():
             bullet.draw_bullet()
         ship.blitme()
         #rectangle.draw(screen)

         #Make the screen visible
         pygame.display.flip()

我得到的不是循环,而是消息: “对于pewpew.sprite()中的项目符号: AttributeError:“组”对象没有属性“小精灵””

1 个答案:

答案 0 :(得分:2)

这不是Sprites和Groups应该工作的方式。如果您只想遍历一个集合并自己绘制所有图纸(没有Group提供的任何功能),请使用简单列表([])。

如果要实际使用Group类,请确保Bullet实际上是Sprite

class Bullet(pygame.sprite.Sprite):

    def __init__(self, ship, *grps):
        super().__init__(*grps)
        self.image = pygame.Surface((3, 15))
        self.image.fill((60, 60, 60))
        self.rect = self.image.get_rect()
        self.rect.centery = ship.rect.centery
        self.rect.top = ship.rect.top

    def update(self):
        self.rect.move_ip((5, 0))

然后创建组/项目符号:

pewpew = Group()     # create the Group
Bullet(ship, pewpew) # create the Bullet

在主循环中,只需在组实例上调用updatedraw

def screenupdate(screen, rct, ship, bullet, pewpew):
     """Update screen images and flip to a new screen"""
     #Redraw screen for everytime the function loops
     screen.fill((230, 230, 230))

     pewpew.update()
     pewpew.draw(screen)         

     ship.blitme()

     pygame.display.flip()

现在确保ship也是Sprite并将其添加到pewpew组中,以便您也可以摆脱ship.blitme()函数。