Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Способ оптимизации и нагрузки на клиент (http://www.flasher.ru/forum/showthread.php?t=210988)

Godwarlock 08.06.2015 20:20

Способ оптимизации и нагрузки на клиент
 
Всем еще раз привет. На этот раз задам достаточно сильно волнующий меня вопрос, касательно игровой карты.
Я нарисовал одну большую карту размером 3000х3500. Достаточно объемная вышла т.к весит около 18 мб. Также нарисовал объекты, которые раскидываются по всей карте(некоторые из них являются препятствием, что-то вроде стен, деревье и т.п. Собственно схема размещения её на сцене.
1) Создаю 2 спрайта контейнера. В первый я размещаю карту(обычным способом, типо из библиотеки выгружаю спрайт), во втором контейнере размещаю объекты. В итоге получаем игровую карту со всем вытекающем.
2) Перемещение работает таким образом, что двигаются контейнера с самой платформой.
Но последнее время меня стал волновать вопрос производительности, а именно насколько сильно я налажал в плане реализации. Чтобы снизить нагрузку на клиент, я уменьшил качество картинки в библиотеке примерно до 60%. Собственно вес карты стал примерно 5мбайт вместо прошлых 18, но при этом конечно пришлось пожертвовать качеством. У меня на уме было два варианта реализовать карту такого масштаба. Первый же, это как я сделал, второй, поделить всю карту на ячейки и программно с помощью цикла расставить их на сцене. Второй вариант мне не очень понравился, во-первых я без понятия на сколько частей делить эту карту, а от этого зависит и размер одной ячейки. А еще делал таким образом, переводил картинку в Bitmap и ставил smooth true, но судя по всему, на производительность это почти не повлияло. Мб знает кто еще какие варианты или кто подскажет советом, как же все таки платформы таких размеров будет правильнее размещать на сцене? Будь все намного проще, если бы карта изначально строилась из ячеек, но для этого понадобится достаточно солидный тайлсет, мне было гораздо удобнее рисовать её от руки, не заморачиваясь, что где-то швы дорог или текстур не будут несоответствовать реальности.

Gaen 08.06.2015 23:27

Правильнее и правда будет разбить карту на части.

Если не хотите заморачиваться с тайлами, то можно изобрести гибридный вариант. Т.е. на входе все та же большая карта, но при инициализации игры она программно режется на ячейки заданного размера (при этом не особо важно, какого они размера и сколько их получится) и программно добавлять/убирать куски, которые пересекаются с экраном.

Но тут стоит аккуратно подойти к вопросу с препятствиями, т.к. во-первых, если препятствие попадет на границу ячейки, то его нужно будет корректно разрезать, а во-вторых, возможно вам потребуется учитывать препятствия за пределами видимой области (например, пуля улетела за экран, отскочила от стены и прилетела обратно), и для этого нужно будет иметь "запас" карты как минимум на одну ячейку в каждую сторону за пределами экрана.

Godwarlock 10.06.2015 00:54

Спасибо) Кое как, да нашел способ разбить карту на части и программно ее воссоздать. Способ оказался верняк, т.к повысил производительность почти в 3 раза)

miramax 11.06.2015 02:38

Цитата:

Сообщение от Godwarlock (Сообщение 1183323)
Мб знает кто еще какие варианты или кто подскажет советом, как же все таки платформы таких размеров будет правильнее размещать на сцене?

К сожалению никаких. Производительность встретится с затыком в размере перерисовываемой области в пикселах.
Если битмап фон размером 1920х1080 на экране 1920х1080 будет двигаться, плеер будет медленно перерисовывать весь дисплей лист (включая все вышестоящие компоненты), если размер перерисовываемой области мешьне - фпс будет повышаться. Можно уменьшить размер окна флешплеера - поможет. Что там за границами отрисовываемой области - производительность напрягает почти никак.
Погуглите Adobe Scout - что бы выявить узкие места. "Качество" джипега или пнг - не влияет ни на что, всё равно всё разворачивается в памяти в информацию об отдельных пикселах. И имеет значение отображаемая перерисовываемая область карты.
Попробуйте, перевести работу с объектами на карте в GPU фреймворк типа Genome2D или Starling


Часовой пояс GMT +4, время: 13:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.