Тема: minecraft
Показать сообщение отдельно
Старый 13.06.2011, 01:06   #14
YellowAfterlife
ПроЭктировщик
 
Аватар для YellowAfterlife
 
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений
(для 219 пользователей)
Ответ: minecraft

С того что упоминал Notch в твиттере и youtube, вся "система столкновений" Minecraft'а - банальный AABB (axis aligned bounding box).
То есть столкновения игрока с 3д массивом реализуются как три цикла for, проверяющие на наличие твердого блока в клетке. Диапазон задается как (x - sizeX) div blockSize .. (x + sizeX) div blockSize.

Поскольку мир весьма и весьма кубический, raycast можно так же упростить, делая проверку подобно рисованию линии в графических редакторах - смещение "указателя" делается постоянно, но проверки блока осуществляются лишь когда изменилась целая часть одной из составляющих.
К примеру, для угла ~44 градуса в двухмерном пространстве проверки будут делатся так:
____X
___XX
__XX_
_XX__
OX___
где "О" - точка в которой находится камера, X - проверяемая клетка карты.

Так же, если это вас интересует, для оптимизации рисования стороны блоков рисуются только для "граничных" блоков, а между блоками "внутри" рельефа не рисуются вовсе. Это неплохо видно на блоке-стекле.

JACUK: скорее всего просто заканчивается память изза постоянных утечек (см. порой нелинейные руки разработчика). Если играть в браузере, то в таком случае будет просто крах браузера (или контейнера плагинов) вместо всего компьютера.

Надеюсь, это помогает.
__________________

Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
den (13.06.2011)