Вторник, 24.04.2018, 09:56 Приветствую Вас Гость


Главная | Регистрация | Вход | RSS
Меню сайта
Категории каталога
Клиент [1]
Графика [1]
Сервер [0]
Наш опрос
Как давно вы играете в Онлайн игры
Всего ответов: 229
Главная » Статьи » Davion Online » Клиент

Бесконечный мир

Наши технологии развиваются очень быстро, но до сих пор компьютеры обрабатывают информацию слишком медленно. В программировании для задания с плавающей точкой почти всегда используют float значения, так как они достаточно быстро обрабатываются компьютером, но они не слишком точны и имеют лишь 7 значимых цифр (могу ошибаться). Представим себе что мы находимся на координатах X 100.0010 и Y 400.0100 шагает наш персонаж примерно на 0,001, вроде все прекрасно, но если мы окажемся на координатах более 10 000 и будем идти с тем же шагом то вместо координаты 10001,001 мы получим координату 10 001,00 (у нас же 7 значимых цифр… кстати графические карты тоже начинают плохо обрабатывать изображение на таких координатах) и что делать? Можно увеличить шаг(и масштаб модели персонажа, да и мира…) но тогда получится что  весь мир мы обходим за куда более короткое время (или так же увеличить максимальную координату мира до 100 000? А что изменится? Ничего!)

Вот чтобы решить эти проблемы были придуманы различные системы деления мира…

В некоторых играх вы наверно видели, что когда вы проходите, определенное расстояние у вас появляется экран с надписью загрузка. Это одно из решений проблемы. Во время этого экрана игра загружает новую область карты, ставит ее на начало координат и кидает вас на 0.  Я думаю повторить такое не сложно. Поэтому немного распишу, как же делают, так что вы можете часами бежать и не видеть этого экрана.

Пол года я лазил по Ру нету, чтобы найти хоть немного информации, а как же сделать бесконечный мир, и честно говоря, нашел мало… в основном информацию я получал лишь  от больших дядей на различных форумах.

 

Представим себе мир, который мы хотим создать (лучше сделайте эскиз мира на бумаге или компьютере). Разделим его на квадраты 10 000 на 10 000,  это будут наши зоны. Каждая зона в свою очередь делится на более мелкие квадраты(назовем их тайлы) их количество зависит от  того насколько у нас большой радиус видимости. Делаем так, чтобы в радиус видимости попадали всего 9 тайлов, это поможет сэкономить место в памяти. Для каждой зоны мы пишем систему Paging Landscape состоящую из тайлов (описание системы можно найти в инете а при желании и скачать готовую…) если вкратце то это система позволяющая определять какие тайлы должны быть видны сейчас на экране подгружает их в память а при отдалении от них выгружает из памяти. В принципе на той же основе строится и система пейджинга для зон, с одним но. При передвижении в зоне у вас отображаются лишь видимые тайлы этой зоны, но в памяти уже подгружаются 9 соседних зон (точнее их костяк который говорит где и какой тайл стоит) , а при переходе из зоны в зону в 1 кадре нужно произвести следующие преобразования: переместить вашего персонажа и всех видимых вам персонажей ближе к нулевым координатам(допустим мы идем по зоне, переходим на следующую, у нас координаты становятся X 8050,005 Y 8034. а зона у нас длинной всего 8000 следовательно после перемещения ближе к 0 новые координаты наши будут X 50,005 Y 34 , хотя ваши глобальные координаты не изменятся ), далее таким же способом нужно перенести все видимые вам зоны, объекты в них, и тд…

 

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

Категория: Клиент | Добавил: Shargot (28.06.2008) | Автор: Денис Кривохатько
Просмотров: 1215 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 2
2  
ой... а я уже забыл про эту статью... обновить над ее как нить чтоли...

1  
Ха! Статье ровно год!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0