Вопрос о дизайне 2D-мира
-
22-09-2019 - |
Вопрос
Я столкнулся с проблемой, которая, вероятно, чрезвычайно распространена в игровом дизайне.
- Давайте предположим, что у нас есть двумерный мир
- Размер мира равен M x N в прямом направлении
- Мир может содержать в себе некоторые предметы
- Элементы имеют координаты (x, y)
- Мир можно просматривать через окно, которое физически (m x n) велико.
- Окно браузера можно увеличивать / уменьшать
- Окно браузера можно перемещать вверх / вниз + влево вправо, находясь в пределах прямоугольника мира.
Как мне следует это реализовать?Меня особенно беспокоит окно браузера.Кто - нибудь может порекомендовать что - нибудь хорошее для чтения ?
Это не домашнее задание - это скорее задача, которую я поставил перед собой, чтобы выполнить.
Другие советы
Реализуйте это так же, как вы бы реализовали Google Maps с помощью специальных маркеров.
По сути, вы сопоставляете прямоугольное подмножество одной области с другим прямоугольником, т. е.окно браузера.По сути, это всего лишь 2 операции - одна из перевода, чтобы расположить просматриваемую область в пределах мира, а затем одна из масштабирования, чтобы взять эту произвольную видимую область и масштабировать ее до размера окна.Отдельно от этого стоит проблема увеличения и уменьшения масштаба, что по сути изменяет размер просматриваемой области.
В разработке игр есть несколько способов подойти к этому.Как правило, вы настраиваете проекцию вида так, чтобы показывать столько окружающего мира, сколько вам нужно (т.е.преобразование из мировых координат в координаты просмотра, обычно ортографическую проекцию) и просто переведите мир или вид, чтобы разместить видовое окно таким образом, чтобы оно указывало на то, что вы хотите видеть.При условии, что вы правильно настроили расположение своих объектов, 3D-оборудование нарисует то, что вы ожидаете.
Возможно, вам удастся обойтись без dhtml, но flash или silverlight было бы намного проще реализовать что-то подобное.
Взгляните на код, лежащий в основе карты Google для некоторого вдохновения.Они делают что-то похожее на то, что вы хотите в чистом html.