В моей программе редактирования карт у меня есть 3 ключевые особенности.
- Добавление спрайтов
- Удаление спрайтов
- Текущий выбранный спрайт следует за мышью
Проблема, с которой я столкнулся, заключается в том, что я использую цикл, который перебирает все добавленные спрайты и выводит их на экран. Задержка становится значительной, и рисование становится сложнее, чем больше спрайтов на экране из-за задержки MS от этого цикла.
while item_list_item_amount > item_list_iterator:
display.blit(pygame.image.load("imgs\\tiles\\" + sprite_list[item_list_iterator]), (x_list[item_list_iterator] * 16, y_list[item_list_iterator] * 16))
item_list_iterator += 1
Каждый цикл Mainloop рисует фон поверх этих спрайтов, чтобы сделать возможным удаление / замену спрайтов. Это заставляет перерисовывать спрайты в каждом необходимом в данный момент цикле.
Цикл выглядит так:
while main_loop == True:
#Main starts loop here
#Update the currently selected tile
display.fill(BGC)
display_listed_tiles()
#Uses mouse coordinates to blit tile over current mouse location
display.blit(tile, (row * 16, col * 16))
screen.blit(pygame.transform.scale(display, WINDOW_SIZE), (0, 0))
#Updates screen
pygame.display.update()
Я пробовал составить список сравнения и рисовать фон только один раз, но при удалении спрайтов остается задержка, и я не могу заставить работать функцию мыши.
Есть мысли о том, разрешима ли эта ситуация? Есть ли способ сжать список спрайтов, который нужно нарисовать до одного объекта, вместо того, чтобы перебирать весь список из сотен? Любая помощь приветствуется!