使用循环创建同一图像的多个实例,我可以独立移动图像的每个实例吗? Python

时间:2019-06-02 12:34:36

标签: python pygame

我在pygame中有一个图片,该图片的多个实例在for循环中调用。有没有一种方法可以独立移动图像的每个实例,而无需按原样使用代码移动其他实例?还是我必须分别加载图像的单独实例?

def pawn(self): 
    y_pos = 100
    self.image = pygame.transform.scale(pygame.image.load('pawn.png'), (100,100))
    for x_pos in range(0,8,1):
        pieceNum = x_pos
        screen.blit(self.image, (x_pos*100, y_pos))

1 个答案:

答案 0 :(得分:1)

我建议使用pygame.sprite.Spritepygame.sprite.Group

创建一个从k派生的类:

pygame.sprite.Sprite

加载图像

class MySprite(pygame.sprite.Sprite):

    def __init__(self, image, pos_x, pos_y):
        super().__init__() 
        self.image = image
        self.rect = self.image.get_rect()
        self.rect.topleft = (pos_x, pos_y)

创建子画面列表

image = pygame.transform.scale(pygame.image.load('pawn.png'), (100,100))

并创建一个精灵组:

imageList = [MySprite(image, x_pos*100, 100) for x_pos in range(0,8,1)]

可以通过group = pygame.sprite.Group(imageList) 绘制组的子画面(.drawscreen创建的表面):

pygame.display.set_mode()

可以通过更改group.draw(screen) 属性的位置来更改子画面的位置(请参见pygame.Rect)。

例如

.rect

当然,可以使用类imageList[0].rect = imageList[0].rect.move(move_x, move_y) 的方法来完成移动:

例如

MySprite
class MySprite(pygame.sprite.Sprite):

    # [...]

    def move(self, move_x, move_y):
        self.rect = self.rect.move(move_x, move_y)