|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Алгоритм миникарты
Всем привет. Возник вопрос по созданию мини карты, точнее каков должен быть её алгоритм? Как синхронизировать скорость передвижения по глобальной карте и отобразить пройденное(уменьшенное расстояние) на мини карте?
|
|
|||||
Вам MVC ни о чём не говорит?
Model. Данные об объектах на карте, игроке на карте и т.д. View1. Сама карта. View2. Мини-карта. Можно не показывать объекты на карте, можно не показывать игрока на карте, можно сделать это настраиваемым по клику по вьюшке.
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 12.09.2015 в 22:27. |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Говорит, но причем здесь это?
|
|
|||||
Сама суть паттерна в том, что есть модель, а есть вьюшки, и их может быть неограниченное количество.
Модель представляет из себя базу данных, а вьюшки отображают данные визуально, и могут использовать при этом разные меры расстояния и спрайты.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Я так понимаю, нужно сгенерировать вторую карту, убрать к примеру в ней объекты, но оставить игрока, уменьшить до нужного размера контейнер этой самой карты. Но вопрос в том, что движение персонажа к примеру будет 5 пикселей за шаг и если на мини карте будет шаг персонажа в 5 пикселей её перекинет за маску.
|
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
найди соотношение карты и мини карты и на мини карте тоже двигай мини карту, а не персонажа, главное найди соотношение и всё будет норм
|
|
|||||
Godwarlock, если вас манит сделать именно так, то пожалуйста.
scaleX/scaleY, базисные оси тоже скейлятся, так что не переживайте за 5 пикселей. Другой вопрос того, что это некрасиво, но если срочно надо, то и так сойдёт. А если есть время разобраться - попробуйте паттерны с моделью и вьюшкой. Это отделение логики с данными от вида. Есть модель, которая хранит положения игроков и объектов и размеры карты. Есть основной вид-карта, есть миникарта-дополнительный вид. Обе берут данные об объектах из модели, и подписаны на события её изменения. Модель при этом не хранит никакого экранного контента, чисто данные местоположения, к примеру, и названия айтемов. Основной вид слушает события ввода и оповещает контроллер, а тот в свою очередь дёргает модель, а та диспатчит об изменении, и оба вида получают событие, что модель изменилась и обновляются. Виды не должны ничего знать друг о друге.
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 13.09.2015 в 00:42. |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
А где тогда логика проводится?
|
|
|||||
Что-то я не понял каким боком сюда MVC относится вообще)
Ну, разве что передавать данные о положении карты и персонажа модели, а модель будет рассылать всем вьюшкам. Но как я понял, вопрос то не в этом, а в том как вообще сделать мини карту, и чтобы персонаж на ней так же пропорционально располагался как и на большой. Код для рассчета расстояний будет примерно таким. Допустим масштаб 1:20 Берем большую карту, и создаем на ее основе маленькую превьюшку // перед созданием превью надо скрыть всех персонажей и прочие игровые объекты с карты, допустим сделать сеттер hideGameObjects map.hideGameObjects = true; var scale:Number= 20; var previewWidth:int = map.width / scale; var previewHeight:int = map.height / scale; var preview:Bitmap = new Bitmap(new BitmapData(previewWidth, previewHeight, true, 0x000000)); var mapX:int = map.x; var mapY:int = map.y; var mapScale:Number = map.scaleX; map.scaleX /= scale; map.scaleY = map.scaleX; map.x = map.y = 0; preview.bitmapData.draw(map, map.transform.matrix); // возвращаем как было map.x = mapX; map.y = mapY; map.scaleX = map.scaleY = mapScale; // дальше ложим эту привьюшку в свой контейнер previewContainer.addChild(preview); // ну и, собственно рассчитываем положение персонажа в ней, тоже деля его на глобальный масштаб // допустим данные о положении карты и персонажа присылает в это мини превью модель preview.x = mapPositionX / scale; preview.y = mapPositionY / scale; // ну и так же для персонажа |
Часовой пояс GMT +4, время: 18:15. |
|
« Предыдущая тема | Следующая тема » |
|
|