Управление слоями в pygame

Я создаю игру на pygame, основная суть которой - процедурно генерируемый 2д-мир. Отрисовка выполняется в каждой итерации основного цикла и не вызывает вопросов. Проблемы начинаются когда я пытаюсь нарисовать спрайт игрока, он просто перекрывается спрайтами мира.

В текущий момент я добавил отрисовку игрока в функцию отрисовки мира, которая осуществляется тупым созданием новых спрайтов. Это приводит к довольно быстрому увеличению потребляемой памяти. Каким образом я могу заставить один спрайт pygame отображаться поверх всех остальных, независимо от времени создания?

Для быстрого создания спрайтов я взял класс Sprite из многочисленных гайдов по pygame:

class Sprite(pygame.sprite.Sprite):
    def __init__(self, x, y, image, ID=-1):
        pygame.sprite.Sprite.__init__(self)
        self.image = image
        self.rect = self.image.get_rect()
        self.rect.topleft = (x, y)
        all_sprites.add(self)
        self.sprite = self
        self.id = ID

    def pos(self,x,y):
        self.rect = self.image.get_rect()
        self.rect.topleft = (x, y)
        self.x = x
        self.y = y

Вот код функции для отрисовки мира:

def draw(a, sX, sY):
 
x = -1
y = -1
for i in a:
    x += 1
    for j in a[x]:
        y += 1
        if x > sX-1:
            x=0

        if y > sY-1:
            y=0

        #if sp.get(x, y) == '*':
            #sp.put(x,y, Sprite(x*20,y*20,image(world.get(x, y)['image'])))
    
        if sp.get(x, y).id != world.get(x, y)['id']:
            sp.put(x,y, Sprite(x*20,y*20,image(world.get(x, y)['image']), world.get(x, y)['id']))

        if pla.get(x,y) != dum:
            pla.put(x,y, dum)
            sp.put(x,y, Sprite(x*20,y*20,image('data/player/player.png'), -2))

Данные о блоках в мире хранятся в виде словарей в двумерном массиве. Для удобства работы с двумерными массивами я создал класс, и методы get и put - от него.

dum - пустой класс, имитирующий спрайт. Обозначает пустоту в текущем месте массива

pla - двумерный массив, хранящий в себе игрока, все остальное заполнено пустотой

sp - двумерный массив, играет роль видеобуфера, созданного чтобы отрисовка новых спрайтов не забивала память. Хранит в себе спрайты мира.

Входная переменная у функции "а" - основной двумерный массив мира


Ответы (0 шт):