Создал несколько экземпляров одного и того же изображения с помощью цикла, могу ли я перемещать каждый экземпляр изображения независимо?

avatar
noname
2 июня 2019 в 12:34
129
1
1

У меня есть изображение в 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)

avatar
Rabbid76
2 июня 2019 в 13:01
1

Я рекомендую использовать pygame.sprite.Sprite и pygame.sprite.Group:

Создайте класс, производный от 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)

Спрайты группы могут быть нарисованы с помощью .draw (screen - это поверхность, созданная с помощью pygame.display.set_mode()):

group.draw(screen)

Положение спрайта можно изменить, изменив положение свойства .rect (см. pygame.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)
imageList[1].move(0, 100)
noname
2 июня 2019 в 13:05
0

Большое спасибо, действительно хорошо объяснено! Очень признателен. :)