|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Как правильно создать "огромную" локацию
Есть задача, создать локацию, которая по размерам будет примерно 16 на 16 тысяч пикселей. Для экономии ресурсов для локации буду использовать тайлы размером 256 на 256 px. Однако, даже при использовании тайлов производительность значительно падает. Подскажите, плиз, как правильно сделать подобную локацию, чтобы не падала производительность.
|
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
Цитата:
Давайте конкретнее разбираться, иначе толку от таких поверхностных разговоров совсем нет. Покажите флэшку, для начала. Ну и код, само-собой.
__________________
hauts.ru |
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Подгружать/выгружать нужные и не нужные тайлы?
Хранить данные не изображением и не DO, а в каком-то текстовом формате (JSON, XML). Profit? |
|
|||||
Регистрация: Jun 2008
Сообщений: 204
|
Цитата:
|
|
|||||
Регистрация: Mar 2013
Сообщений: 10
|
А может комп по новее купить...
|
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Цитата:
|
|
|||||
Есть карта. Вся. Поделеная на тайлы.
Есть вью-порт. То что видно на екране, + зазор по краям на полтайла-тайл. Следим за вьюпортом. Всё что вне его - убираем. Насколько сильно надо убирать - сами разберетесь. Может просто визибл фолс хватит. А может и вообще картинки дестроить придется полностью. Когда вьюпорт попадает на невидимый блок - создаем и показываем. Для этого и зазор нужен. А то может получиться что на краю экрана будет пустой тайл, не отрисованный.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Регистрация: Jan 2011
Сообщений: 200
|
и всем игрокам в дальнейшем это же посоветовать
|
|
|||||
Решал я как-то такую задачу у себя в игре. Схема получилась длинная и сложная, но работает как часы. Карты можно делать очень большие, без потери производительности.
Решение было почти как описал Dukobpa3, только у меня для большей части работы используется метод copyPixels(). То есть изначально создается картинка, размером чуть больше экрана. И на основе позиций объектов, описанных в xml, в нее при смещении врисовывается нужная картинка, Но не так, что при смещении на один пиксель она снова перерисовывается, а, скажем, сместилась она на ширину кратную ширине одного тайла (200px), возвращаем ее в исходное положение (на 200 пикселей назад) и перерисовываем. Так для всех тайлов, которые могут быть на экране в данный момент. Это решение подходит для всех объектов, которые не нужно сортировать. Все они врисовываются в нужные тайлы еще на этапе парсинга карты. Далее они просто ложатся в коллекцию (создавал специально, чтобы можно было просто найти объект, на основе его координат) А для объектов, которые подлежат сортировке, используется вьюпорт. Простая проверка "за пределами экрана" или нет. Так как их гораздо меньше, чем тайлов, то тут можно и removeChild() / addChild() использовать В общем, в любом случае придется голову поломать. Простого решения тут нет. |
|
|||||
Да оно и без всяких махинаций с copyPixels не должно тормозить
Просто убирайте невидимые тайлы из списка отображения (removeChild) (только не в каждом кадре убирать всё и добавлять видимое, а удалять/добавлять только при изменении статуса видимости - определялка областей перерисовки к этому делу очень чуствительна) Еще всё гораздо быстрее работает, если битмапа в тайлах не поддерживает прозрачность. Стоп, 16000x16000 - да у вас там под гигабайт всего. Может редактор написать и попереиспользовать одинаковые тайлы. Хотя, если оно не перерисовывается и в JPEG, то занимать будет мало. Короче, нужно больше информации. Т.к. причины тормозов не понятны. |
Часовой пояс GMT +4, время: 16:41. |
|
« Предыдущая тема | Следующая тема » |
|
|