我试图遍历小组中的小精灵,以便绘制它们。但是,我收到一条消息,说明该组没有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:“组”对象没有属性“小精灵””
答案 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
在主循环中,只需在组实例上调用update
和draw
:
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()
函数。