Я пытаюсь написать 2D-игру, используя python / pygame, которая при каждом обновлении экрана создает несколько слоев друг над другом.Моя базовая настройка (снизу вверх):
- Фон: поверхность (непрозрачная), прокручивается с другой скоростью, чем остальные
- Среда: прозрачная поверхность SRCALPHA (статическая)
- Игрок / Спрайты / Враги: группа спрайтов
- Forground: прозрачная поверхность SRCALPHA (статическая)
Прямо сейчас, я срываю эти четыре слоя один сверхудругого каждого экрана.Фон прокручивается с другой скоростью, чем у других трех слоев, поэтому у меня он отделен от среднего уровня.Поскольку у меня есть структурированная игра, она работает на моем довольно скромном ноутбуке со скоростью 60 кадров в секунду.
-НО- У меня проблемы с группой спрайтов, которую я перетягиваю прямо на экран.Необходимость настройки прямоугольника для каждого спрайта в соответствии с моим текущим окном просмотра кажется уродливым способом программирования вещей, и я бы хотел более элегантное решение.
Я бы хотел перебросить спрайты на другую прозрачную поверхностьс этим я мог справиться, но в этом и заключается моя проблема: я не могу найти способ очистки прозрачного слоя, который не наполовину снижает производительность.Некоторые настройки, которые я пробовал:
- Я пытался заполнить слой белой поверхностью в режиме наложения rgba_sub (surf.fill ((255,255,255,255), area, BLEND_RGBA_SUB)) - этоэто супер, очень медленно
- Я пробовал Surface.copy () пустой поверхности - это быстрее, но все равно вдвое меньше моего fps
- Я пытался комбинировать спрайты со средним уровнемслой и использование pygame.sprite.LayeredUpdates для обновления спрайтов.Это не влияет на производительность, но не работает там, где средний уровень прозрачен.Я получаю следы спрайтов поверх фонового слоя.
Лучшее решение, которое я нашел на данный момент, - это моя текущая настройка рисования спрайтов прямо на экране.Он выглядит великолепно, работает быстро, но управлять им сложно, так как я должен убедиться, что прямоугольник каждого спрайта корректируется в соответствии с окном просмотра каждого кадра.Это также затрудняет обнаружение столкновений.
Есть ли другой быстрый способ очистки прозрачной поверхности пигамов?Быстро, как в, можно сделать 60+ раз в секунду? Альтернативно, есть ли настройка для моих слоев, которая все еще будет выполнять тот же эффект?