Python Pygame获取Sprite组中Sprite的属性

问题描述

TL; DR:如何获取Sprite组中对象的属性

我有一个名为“ all_bullets”的精灵组。我正在尝试制作飞旋镖引擎,因此当我拍摄(按空格键)时,会将一个子弹对象添加到all_bullets组(我已经对该类进行了编码)。但是,我不想拍摄尽可能多的飞旋镖。因此,我只想在精灵组中没有回旋镖(子弹对象)时创建项目符号对象,因此我知道屏幕上没有回旋镖。但是,还有其他子弹。像手枪一样。 因此,我想知道如何获取Sprite组内部对象的.image属性。该组中有多个对象,所以我只尝试输入'bullet.image'无效。 有什么建议?预先感谢

解决方法

没有任何代码很难回答。但是您的建议是,直接引用精灵的.image 应该有效。

考虑一个简单的Bullet精灵:

class BulletSprite( pygame.sprite.Sprite ):
    def __init__( self,filename,from_point,to_point,speed=1 ):
        pygame.sprite.Sprite.__init__( self )
        self.image = pygame.image.load( filename ).convert_alpha()
        self.rect  = self.image.get_rect()
        self.speed = speed
        self.rect.center = ( from_point )
        self.x = from_point[0]
        self.y = from_point[1]
        #...

带有一个精灵组:

all_bullets = pygame.sprite.Group()

# Add some bullets
for i in range( 5 ):
    from_point = ( 0,WINDOW_HEIGHT//2 )              # middle left
    to_point   = ( WINDOW_WIDTH,100 * i )            # somewhere right
    # create the bullet
    new_bullet = Bullet( 'bullet.png',to_point ) 
    all_bullets.add( to_point ) 

# and one more:
boomerang1 = Bullet( 'boomerang.png',( 0,0 ),( WINDOW_WIDTH,WINDOW_HEIGHT ) )
all_bullets.add( boomerang1 )

现在,绝对有可能使用/访问各个精灵的.image成员来遍历此列表:

for bullet in all_bullets:                               # every sprite in the group
    window.blit( bullet.image,( bullet.x,bullet.y ) )  # paint the image

请注意,这可能不是最佳方法,因为对象的内部部件最好留给对象使用。因此,在上述情况下,您将创建一个bullet.draw()函数,并调用它以绘制image