Создано несколько экземпляров одного и того же изображения с помощью цикла. Могу ли я перемещать каждый экземпляр изображения независимо?питон - PullRequest
1 голос
/ 02 июня 2019

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

1 голос
/ 02 июня 2019

Я рекомендую использовать 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).

* 1 033 * например,
imageList[0].rect = imageList[0].rect.move(move_x, move_y)

Конечно, движение может быть выполнено методом класса MySprite:

* * +1039 например,
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...