Я розвиваю 2D гру, і у мене багато спрайтів. Я використовував 3D-анімації та моделі, щоб перетворити їх у 2D, щоб надати їм такий вигляд "Fallout" або "Diablo". Це також простіше, ніж малювати вручну, lol.
Мені вже довелося скоротити частоту кадрів до 15 кадрів в секунду, що було найнижчим, що я міг опустити, не змусивши їх поглянути на них. Однак це було сумно через те, як виглядали неймовірно гладкі 24 кадри.
У мене це дві причини:
1) Скоротіть місце на жорсткому диску. Чим менше зображень, тим меншою буде моя загальна гра.
2) Скорочення споживання оперативної пам'яті. Чим менше буде завантажувати зображень, тим більше шансів на те, щоб уникнути проблем, що обмежують обмеження оперативної пам'яті.
Однак, якби був спосіб стиснення зображень як у просторі на жорсткому диску, так і в оперативній пам’яті, я б це зробив. Я перевіряв це раніше, і більшість не отримує жодних змін якості при наданні з RGBA8888 на RGBA5555 і лише незначне враження при переході на RGBA4444 в моїй програмі TexturePacker. Я зараз цього не роблю, тому що, здається, SFML використовує однаковий об'єм пам'яті незалежно від типу .PNG-зображення. Я розглядав питання, як його по-різному завантажувати, але нічого не вдалося знайти з цього приводу.
Я багато читав про те, як обробляти 2D відеоігри. Консенсус надзвичайний: упакуйте свої спрайти в більшу текстуру для чудової продуктивності! Тому я запакував свої крихітні спрайти в набагато більшу спрайти, використовуючи TexturePacker.
Однак я планую мати 10-15 анімацій на персонажа, 5 напрямків для переміщення та 15-40 кадрів на анімацію (можливо, в середньому 24). З 15 анімаціями, 5 напрямками і в середньому 24 кадри на анімацію; Тобто 1800 індивідуальних кадрів на персонажа. Якщо вони упаковані в спрайт-аркуш, то замість цього всього 75 зображень. (Один спрайт лист на анімацію, за напрямом. 15 * 5)
Для одного величезного героя боса в грі я не можу використовувати таблицю спрайтів і мені потрібно запрограмувати спосіб просто завантажити одне зображення за один раз. Я не знаю, чи можу я це ще зробити для виступу.
Для персонажів я вже упаковую їх у спрайт-лист. Для одного персонажа, що ходить, це, здається, працює більшу частину часу, хоча іноді це затримується. Однак я пов'язую це зі своїм непродуманим кодом, який замінює текстури замість попереднього завантаження всіх текстур для цього символу.
Якби я попередньо завантажував текстури, це має сенс для спрайтових аркушів. Я б тільки уявив, що погана ідея попередньо завантажити 1800 крихітних зображень на кожного персонажа.
Однак, я думаю, передача їх у пам'ять і з пам'яті одна за одною була б надзвичайно швидкою, тому мені потрібно було б одночасно мати одне зображення в пам'яті. Чи не означає це, що в будь-який момент я мав би, щоб кожен символ споживав лише кілька КБ замість 45 + МБ?
Я думаю, що це призведе до вбивства моєї продуктивності, оскільки потокове передавання повинно бути неймовірно швидким (15 зображень, що надходять у пам'ять і виводяться за секунду), і хоча зображення будуть дуже маленькими - це може бути кращою ідеєю для завантаження символьних списків замість цього. Але мені все одно доведеться кодувати систему візуалізації, що нагадує потокове зображення, для мого більшого персонажа боса.
Я експериментував, але це не простий процес. Особливо враховуючи той факт, що я працюю над іншими частинами ігрового двигуна, які зараз не займаються графікою.