![]() |
Оптимизация скроллинга большой изометрической карты
Продолжаю осваивать изометрию, гуглил несколько дней, искал готовые движки и тьюториалы для старлинга, все что находится, производит грустное впечатление. Есть isoHill, есть многочисленные заброшенные порты as3isoLib, большинство из которых даже не компилируются, нет нужного мне функционала, и годится только на то, чтобы посмотреть как делают другие. Ну это лирика, теперь ближе к делу. Вопрос с которым я столкнулся, и по которому хотелось бы узнать мнение опытных товарищей, заключается в оптимизации скроллинга большой изометрической карты. И насколько вообще реально на флеше делать большие изометрические карты (например 1000 х 1000 тайлов). Из всего что я нашел, можно выделить 2 подхода:
1. Описан в книге Juwal Bose Starling Game Development Essentials. Тайлы перебираются из, допустим JSON описания карты и рисуются в одну большую текстуру, привожу предельно краткий кусок кода, функция инициализации карты (тут только бекграунд, 1 слой): Код AS3:
2. Этот подход я подсмотрел в этом тьюториале Карта состоит из тайлов (т.е. в отличие от предыдущего метода, здесь каждый тайл это отдельный объект), которые храняться в обжект пуле, и подсовываются по мере движения персонажа по карте. Я подозреваю что это единственый способ отрисовки крупных карт на флеше, но возникает вопрос насколько он производительный, для больших и сложных карт и фулскрина? Смущают размеры демки, к этому тьюториалу http://murdochcarpenter.com/clients/...starling/demo/ В идеале конечно хотелось бы совместить лучшее из этих двух подходов, в принципе есть идеи как это сделать (можно, допустим, отрисовывать карту кусками во весь экран как в подходе 1, и тайлить при переходе перса с экрана на экран), хотя конечно реализовать это будет сложно. Но в любом случае, прежде чем приступать к работе, хотелось бы услышать ваше мнение, возможно у кого то есть ссылки на рабочие либы, и т.д. |
для правильного порядка, и отсутствия постоянной сортировки используйте слои. штук 10 обычно достаточно.
в каждом слое создаете пул объектов с позициями и добавляете все их в quadTree (быстрые выборки по координатам). у каждого слоя имплементируете метод setViewPort, по получению которого делаете выборку из quadTree и обновляете displayList только объектами в фокусе. setViewPort вызываете по enterFrame или муву карты. это общий подход, отдельно идет оптимизация анимаций, пулы картинок, обновление дерева p.s еще хз есть ли смысл привязываться к тайлам, они используются в основном для поиска пути и грубого позиционирования, чем в отрисовке |
Спасибо за отклик, буду обдумывать ваши советы
Добавлено через 47 часов 10 минут Что неужели больше некому и нечего сказать? В общем я решил форкнуть понравившийся мне порт as3isoLib на старлинг, и допилить его под себя. Писать движок с нуля показалось мне как то черезчур. Если что то толковое получится, напишу в блоге. |
| Часовой пояс GMT +4, время: 20:49. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.