Советы по увеличению производительности для мобильных игр

уроки, мануалы, советы по Construct 2

Сообщение Советы по увеличению производительности для мобильных игр
» 10 апр 2013, 13:44

Оригинал:
https://www.scirra.com/tutorials/298/performance-tips-for-mobile-games

Итак, вы установили Construct 2 ??и, работая в нём, создали простую игру с 5-ю спрайтами и фоном, экспортировали ее в PhoneGap или appMobi, и далее вы такой:"она выдаёт 5 кадров в секунду, что за херня, С2?». У самого такое было, сам такое наблюдал, и как довольно успешный разработчик мобильных на C2, я хотел бы хотел пролить свет на это, и как заставить его работать.

Успокойтесь
(небольшое отступление - я не знаю как правильно перевести Canvas(Холст, изображение, экран?). Оставлю как есть)
С2 экспортирует игры как HTML5 Canvas. Почти каждый браузер ПК поддерживает аппаратное ускорение именуемое WebGL, который на мобильных телефонах, наоборот - не поддерживаются так широко( по сути, единственный известный мне телефон, поддерживающий WebGL - это Xperia). Разумеется, мобильные браузеры как Опера и Firefox, кажется, поддерживают WebGL, но PhoneGap приложения не используют их, они используют встроенный браузер.Так что, пока встроенные браузеры не поддерживают WebGL, Canvas на мобильных телефонах будет обрабатываться крайне медленно. Теперь давайте к этому добавим систему событий (eventing system) которую использует С2,экспортируемая как javascript. Система событий, созданная Вами на С2, обрабатывается на процессорах мобильных телефонов за секунду с такой скоростью, с которой только может, поэтому, чем больше событий, там медленнее игра будет работать. В этом легко запутаться...

Что же делать?
1)ВСЕГДА ставьте следующие параметры: Pixel rounding to On, WebGL to On, Sampling to Point, Clear Background to No и каждый слой каждого вашего уровня - transparent to Yes (за исключением особых случаев)
Pixel rounding даёт возможность процессору избегать сложных вычислений, связанных с плавающими точками, point sampling изменяет размер и вращает спрайты быстрее (только со включенным WebGL, что позволит ускорить ваше приложение в будущем), clear background выключает заполнение Canvas'а белым фоном на каждом кадре.

2)ИЗБЕГАЙТЕ большого количества спрайтов на экране
Вот вам! Более 20 спрайтов, вероятно, замедлят систему. Та же история и с большими спрайтами.

3)ИЗБЕГАЙТЕ изменения размера спрайтов и их вращение.
Такие события как: Set (width/size/scale/angle/rotate) ширина / размер / масштаб / угол / вращение (Да-да - поведение Rotate) - являются убийцами производительности.

4)ИЗБЕГАЙТЕ полупрозрачности и эффектов
Такие события как: установить прозрачность, эффект и поведение Fade (+Sine с функцией opacity) будут снижать FPS.

5)НИКОГДА не используйте force own texture на слоях
Каждый слой имеет свою собственную текстуру, которую будет отображать отдельно. Это плохо - иметь в наличии два Canvas'а(слоя?), когда один уже работает медленно.

6)НИКОГДА не используйте text object
Обрабатывание текста является крайне не эффективным. Лучше использовать spritefont plugin или textbox.

7) ИЗБЕГАЙТЕ частиц(particles)
Частицы создают большое количество спрайтов (см. 2)

8) ИЗБЕГАЙТЕ быструю анимацию
Да, необходимо уменьшить скорость анимации и не превышать скорость 10. Кроме того, имейте в виду, некоторые мобильные браузеры имеют предел загружаемых изображений, поэтому следует избегать спрайты с большим количеством кадров в анимации. Если спрайты имеют менее 100 кадров анимации - это хорошо.

9)ИЗБЕГАЙТЕ For each циклов в событиях
Для 20 спрайтов "For each" вызовет тормоза.

10) Scroll to эффективнее, чем двигать всё
Редкая ситуация, но это случилось со мной. Не нужно двигать каждый объект, если можно прокручивать ваш экран.

Изучайте кОды
Не бойтесь этого, это весело

1) Изучить немного HTML, CSS и JavaScript
По крайней мере, столько, чтобы сделать следующее изменение в вашем экспортированном HTML файе:
<style>
...
canvas, canvas * {image-rendering: optimizeSpeed}
</style>

Это будет работать на некоторых встроенных мобильных браузерах и заставит программу отметить изменение размера и вращение.

2)Наконец, не используйте PhoneGap и appMobi
Вы поплатитесь за это позже, поверьте. Экспортируйте игру как phonegap app, но тестируйте в Eclipse, Xcode, и т.д. Прежде всего, это поможет вам лучше настроить ваше приложение - добавлять иконки, непосредственно изменять приложение. Во-вторых, это позволит вам использовать PhoneGap плагины, в основном это LowLatencyAudio плагин, который является встроенным способом воспроизведения звука, в отличие от HTML звуковых элементов, которые используются в С2а. Есть много учебников по Web о том, как это сделать, я лично рекомендую учебник по PhoneGap.

Терпение, мой ученик
HTML5 игр является совершенно новой технологией, но как можно заметить, она развивается очень быстро, что подталкивает разработчиков к WebGL'у. Представьте себе, если бы в WebGL'е было мало нужды, вероятно, он был бы доступен только в бета-версии Chrome, как это было некоторое время назад. Теперь он есть в Firefox (также Firefox Mobile) и на Mobile Opera. Я считаю, что это только вопрос времени, он будет поддерживаться на большинстве (если не на всех) мобильных системах.

Веселитесь и тестируйте
Больше нечего добавить. Чем скорее вы начнёте тестировать Ваши игры, тем лучше!
Аватара пользователя

Игродел
Сообщений: 373
Я тут с 24 ноя 2012
Репутация 80 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 10 апр 2013, 14:05

Из всего этого можно сделать вывод, что данные советы распространяются не только на мобильные телефоны.
Я бы ещё добавил -
ИЗБЕГАТЬ Physic Behaviour и заменять его Bullet Behaviour(в некоторых случаях )- сам так сделал.
ИЗБЕГАТЬ Platform Behaviour и заменять его тем же Bullet Behaviour где это только можно- сам так сделал.
Аватара пользователя

Игродел
Сообщений: 373
Я тут с 24 ноя 2012
Репутация 80 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 10 апр 2013, 19:58

А что скажите насчёт CocoonJS?
Есть какие значительные минусы?
Аватара пользователя

Участник
Сообщений: 13
Я тут с 31 мар 2013
Репутация 1 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 11 апр 2013, 01:44

Pasifia писал(а):А что скажите насчёт CocoonJS?

viewtopic.php?f=4&t=444&start=20#p5721
Большое спасибо всем, кто пишет мне респекты в ЛС! Очень рад, что до сих пор мои советы, примеры и уроки пользуются спросом... Но, к сожалению, я уже давно не занимаюсь разработкой игр и программированием вообще, поэтому я уже не лучший советчик в этом деле, да и времени совсем нет. Здесь на форуме я уже практически не бываю, но всегда открыт для общения в ВК: vk.com/virusfun
Но хоть меня здесь почти нет, мне все равно будут приятны ваши отзывы и плюсы [+]
Аватара пользователя

Игродел
Сообщений: 893
Я тут с 23 сен 2012
Откуда: Хабаровск
Репутация 130 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 11 апр 2013, 01:52

Спасибо за перевод, Bomba.
Что-то статья какая-то пугающая чтоли... сразу отбивает желание что-либо вообще делать :/

Поэтому хочу добавить, что всё описанное в статье - это просто описание тех вещей, которые требуют наибольшее количество ресурсов. То есть, если написано "НИКОГДА не используйте text object" - это не значит, что его не нужно использовать! Просто имейте в виду тот факт, что этот объект можно исключить ради производительности...
Не сцыте;) не относитесь однозначно к словам типа "НИКОГДА" и "ИЗБЕГАЙТЕ".
Большое спасибо всем, кто пишет мне респекты в ЛС! Очень рад, что до сих пор мои советы, примеры и уроки пользуются спросом... Но, к сожалению, я уже давно не занимаюсь разработкой игр и программированием вообще, поэтому я уже не лучший советчик в этом деле, да и времени совсем нет. Здесь на форуме я уже практически не бываю, но всегда открыт для общения в ВК: vk.com/virusfun
Но хоть меня здесь почти нет, мне все равно будут приятны ваши отзывы и плюсы [+]
Аватара пользователя

Игродел
Сообщений: 893
Я тут с 23 сен 2012
Откуда: Хабаровск
Репутация 130 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 16 апр 2013, 08:55

Думаю стоит это сюда добавить ибо проблема существенна:

В играх с использованием поведения физики на слабых мобильных устройствах вместе с низким ФПС можно наблюдать SLOW MOTION эффект (как буд-то замедление времени для всех объектов с поведением физики).
Чем это обусловлено: В С2 большинство поведений независимы от FPS. Т.е. используя к примеру поведение платформер, спрайт переместится на равное количество пикселей за 1сек что при 60 ФПС, что при 30 ФПС. Поведение Physics Behavior по умолчанию зависимо от ФПС. Зависимость можно снять при помощи включения set stepping mode (Framerate Independent), но в таком случае физика симулируется крайне некорректно, с подергиваниями. Проблему однако отчасти можно решить путем добавления ко всем действиям к для объектов с применением физики *(60*dt). Это компенсирует SLOW MOTION эффект и симуляция будет более корректной и плавной, чем при включении set stepping mode (Framerate Independent).
Изображение
Аватара пользователя

Модератор
Сообщений: 2962
Я тут с 19 дек 2012
Откуда: Новый Уренгой
Репутация 302 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 16 апр 2013, 17:47

Только что случайно набрёл на это - (не С2)
http://www.webappers.com/2013/04/15/a-guide-for-mobile-game-development-for-browsers/
Ещё не вчитывался, но в этой статье есть ссылка на другую по HTML5 и всё такое, думаю, будет полезно кому-то.
Довольно интересная диаграмма:
oimage003.png
oimage001.png
Аватара пользователя

Игродел
Сообщений: 373
Я тут с 24 ноя 2012
Репутация 80 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 17 апр 2013, 20:54

На Iphone`s реально создать игру, чтоб она была давольно таки масивная, и работала без тормозов? Ну что то типо EarthWorm Jim?
Изображение
Аватара пользователя

Участник
Сообщений: 102
Я тут с 27 сен 2012
Откуда: Сургут
Skype: Alex86rus70
Репутация 8 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 18 апр 2013, 05:51

Так же заметил, что в мобильном компиляторе от cocoonJS при тестировании игра все равно идет более плавно, чем после компиляции в АПК через их сервис cloud...

X_Tasadar_X писал(а):была давольно таки масивная, и работала без тормозов?

Всё в пределах разумного. Нужно понимать, что смартфон - штука на самом деле слабая и нужно крайне аккуратно под неё оптимизировать ибо даже одна, казалось бы незаметная деталь может так опрокинуть ФПС, что потом мозг сломаешь, пока методом исключений её убьешь...
Изображение
Аватара пользователя

Модератор
Сообщений: 2962
Я тут с 19 дек 2012
Откуда: Новый Уренгой
Репутация 302 [ ? ]

Сообщение Re: Советы по увеличению производительности для мобильных иг
» 23 апр 2013, 19:56

mef1sto, скажите как же все-таки добавить (60*dt) к объектам с физикой? Я пробовал делать пример с официального форума, все что получилось, так это чтобы спрайт двигался вправо и то получается прерывисто.
Аватара пользователя

Участник
Сообщений: 65
Я тут с 27 мар 2013
Репутация 8 [ ? ]



Вернуться в Уроки по Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх