В этом разделе описаны способы того, как мобильные разработчики должны писать код и структурировать приложения для достижения высокой производительности в играх. Основная идея тут - игровой дизайн и оптимизация не являются раздельными процессами. Решения, которые вы принимаете во время проработки дизайна игры могут сделать её не только интересной, но и производительной.
Вы можете вспомнить старые игры, когда игроку позволяли сделать лишь один выстрел за раз, и скорость перезарядки зависела от того попала пуля или нет, а не от времени. Эта техника называется пулинг объектов_, и она упрощает управление памятью, позволяя приложениям работать плавнее.
Создатели игры Space Invaders имели в своём распоряжении небольшое количество RAM, так что им приходилось следить за потреблением памяти. Если бы они позволяли игроку стрелять раз в секунду и предлагали бы бонус, сокращающий время перезарядки до половины секунды, им пришлось бы постоянно проверять - хватает ли памяти для всех выпущенных пуль, если игрок стреляет так часто, как только может и при этом все выпущенные пули “живут” как можно дольше не по падая по препятствиям. Вероятно это создало бы для них проблему, так что они просто выделяют память для одной пули и только её и используют. Как только пуля “умирает”, она просто деактивируется, перемещается на новое место и заново активируется при очередном выстреле. При этом пуля занимает одно и то же место в памяти и ей не приходится его менять, и её постоянно не удаляют и не создают заново.
Хоть в это и трудно поверить, но иногда это весело. Напряжение снимается в кульминационный момент, когда инопланетные захватчики приближаются к земле, аналогично кульминации в фильму или литературе. Близость захватчиков дарит игроку-адепту почти немедленную перезарядку, позволяя ему чудесным образом защищать землю частым нажатием по кнопке выстрела в самое подходящее время. Хороший дизайн игры живёт в неком странном пространстве, между интерактивным рассказом и технологией, которая за всем этим стоит. Тяжело спланировать такие весёлые, великолепные и эффективные вещи, как эта, так как логика кода и взаимодействие с пользователем - две очень различные и глубоко продумываемые вещи, и их совместное использование для синтеза чего-то необычного, нового и забавного требует много раздумий и экспериментов.
Вероятно вы не сможете спланировать каждый аспект вашей игры в рамках интерактивности и хорошей работы на мобильных устройствах одновременно. Гораздо более вероятно, вы найдёте те самые “жемчужины” игрового процесса, возникающие при гармоничном сочетании этих двух понятий, случайно, во время экспериментов. Но иметь полное представление о том, как работает ваш код на целевом оборудовании - очень полезно. Если вы желаете посмотреть детальное техническое объяснение того, почему пулинг объектов лучше и узнать о выделении памяти, прочтите страницу Оптимизация скриптов.
Допустим, вы начинаете работать над игрой и желаете впечатлить ваших игроков одновременно большим количеством экшена и разными выделяющимися штуками. Как вы планируете такие вещи? Как вы узнаете, где предел? Если говорить в рамках игры, как много у вас будет монеток, зомби, машин соперников и т.д.? Все это зависит от того как вы запрограммируете вашу игру.
Чаще всего, если при написании кода вашей игры вы следуете простым путём, или более универсальным и гибким путём, то вы намного быстрее столкнётесь с проблемами производительности. Чем больше вы будете полагаться на специфичные структуры и трюки для выполнения вашей игры, тем больше расширятся горизонты, и вы сможете втиснуть ещё больше контента на экран.
Читайте на странице Оптимизация скриптов.