80 кадров довольно много, но это число никогда не было проблемой в моих проектах. Тем не менее, большинство наших 60-кадровых предварительно визуализированных анимаций маленькие, как мигающий значок графика c в сегментах 48x48, с одним листом (так что переключение контекста минимально). Это никогда не было проблемой производительности для нас ... НО вы говорите, что 256x256 меня немного пугает, особенно если он не обрезан и создается много png-файлов!
В то время как мои проекты имеют спрайты с одинаковыми номерами кадров, они были оптимизированы с помощью Texture Packer . Убедитесь, что для режима обрезки установлено значение «Обрезка» и что оно не «Нет» (настройка находится внизу в разделе «Спрайты»). Этот параметр будет де-гомогенизировать 256x256 в меньшие части, если это вообще возможно, уменьшая общее количество листов и текстурных привязок (я думаю, а также меньше переключений контекста) .. Я не совсем уверен, как вы упаковали свои спрайты или если они могут даже быть обрезаны, но это может потенциально быть спасением жизни.
Позвольте мне показать вам пример:
До
После
Также, если вы предоставили код для создания анимации, мы могли бы перепроверьте, чтобы убедиться, что вы не связываете 80 текстур, когда потребуется только 1. Я создаю свои анимации с помощью следующего процесса:
TextureAtlas atlas = assetManager.get(atlas_name);
Sprite[] spriteFrames = new Sprite[numFrames];
for (int index=0; index<numFrames; index++) {
if (atlas.findRegion(lookup_name, index) == null)
Engine.console("[ERROR] problem loading and finding region for " + atlas_name + " " + lookup_name + " index: " + index + " not found in spritesheet .. fix immediately");
else {
spriteFrames[index] = atlas.createSprite(lookup_name, index);
}
}
Animation<Sprite> animation = new Animation<Sprite>(timeBetweenFrames, spriteFrames);
Я надеялся, что это помогло дать некоторое представление.