Я разрабатываю старомодную 2D RPG с помощью Python + pyglet.
Карта состоит из нескольких слоев (до 10), каждый из которых состоит из тайлов прямоугольной формы (32x32 пикселя). Спрайты (партийные персонажи, NPC и некоторые другие вещи) рисуются между двумя слоями (обычно перед последним).
Для рендеринга я использую один пакет со многими OrderedGroups: по одной группе на слой и по группе на спрайт.
Проблема со спрайтами заключается в том, что они должны отображаться в порядке убывания их значения y, поэтому группы расположены следующим образом (предположим, что на карте есть 3 слоя, и что 2 спрайта должны быть отрисованы непосредственно перед последним):
g[0] = OrderedGroup(0) : first layer
g[1] = OrderedGroup(1) : second layer
g[2] = OrderedGroup(2) : empty, serves as a base for the following :
OrderedGroup(0, parent = g[2]) : the highest sprite
OrderedGroup(1, parent = g[2]) : the lowest sprite
g[3] = OrderedGroup(3) : the third layer
Когда я добавляю спрайты слоев в пакет, я указываю, что они статичны. Когда я добавляю спрайты для вечеринок, они становятся «динамическими».
Итак, мой первый вопрос: поскольку все они принадлежат к одной и той же партии, разве это не противоречит друг другу? (произносится по-другому: является ли «статический» или «динамический» свойством объекта спрайта или пакета?) (примечание: я уточняю, что у меня действительно мало знаний об OpenGL и понятия не имею, как пакет и группы реализованы)
Пока что производительность правильная (хочу 60 фпс, а их у меня до 8 движущихся спрайтов), но производительность быстро падает при более чем 8 движущихся спрайтов (чего в финальной игре быть не должно, а хотелось бы мой движок будет максимально эффективным без перевода частей на C/ASM).
Итак, мой второй вопрос: является ли стратегия, которую я выбираю (используйте партии и как можно меньше), хорошей?
Заранее спасибо за ответы