Реализация (создание) игровых зданий и пещер.
При создании многих жанров игр, а в особенности экшенов и ролевых RPG, часто приходится создавать пещеры с монстрами или здания с артефактами, жителями и квестами. Особенностями таких зданий является скрытие внутренности здания от глаз игрока до тех пор, пока персонаж не войдет в здание. Как это реализовать? И какие имеются варианты? Поговорим об этом далее.
Начнем с того, как скрыть внутренности здания. Необходимо сделать проверку в таймере где будет проверятся следующее:
1) если в видимой части карты есть покрытие пола (текстура пола), значит это здание, и его нужно скрыть
2) но скрываем мы это здание или пещеру лишь в том случае, когда наш персонаж в данный момент находится не на клеточке, в которой находится текстура пола. Ведь если персонаж стоит на полу или на входе (текстура двери или входа), значит он внутри здания.
3) При желании можно скрывать еще и стены пещеры, но это уже на Ваше усмотрение. Нужно будет только добавить еще одно условие, когда нужно скрывать текстуры с таким номером.
Давайте реализуем такую проверку непосредственно в таймере. Поэтому помещаем на форме компонент timer и дважды кликаем по нему. А далее пишем примерно следующий код:
For i:=0 to 49 do
For j:=0 to 49 do
begin
If (map[I,j]=1) and ((map[Pers.X,Pers.Y]=1) or (map[Pers.X,Pers.Y]=2)) then
Buf.canvas.Draw(I,j, Texture[ map[I,j] ])
Else Buf.canvas.Draw(I,j, Texture[ 12 ]);
End;
Прочитав данный код сразу возникает куча вопросов. Давайте ответим на них последовательно. Откуда в цикле взяты цифры 0 и 49? Это условные размеры карты. В моем примере карта размером 50х50 клеточек. Если у Вас другие варианты, то просто подставьте свои числа.
Далее идет проверка. Массив map хранит текстуры земель (земля, вода, снег, пол, стена и так далее). Предположим, что текстура с номером 1 будет у нас пол, а текстура с номером 2 – вход в пещеру или здание. В таком случае наша проверка читается так:
Если (текущая клетка которая рисуется – это пол) и ( (клетка, где стоит персонаж тоже пол) или (клетка, где стоит персонаж это вход) ) тогда
Рисуем истинное покрытие, то есть пол.
В остальных случаях (случаи когда персонаж не стоит на полу или входе) рисуется текстура с номером 12. Это вымышленная текстура. Предположим, что текстура с этим номером будет скрывать под собой пещеры и здания, а точнее, то что внутри них. Это может быть текстура крыши здания, может туман, или горная местность (применимо для пещер).
Таким вот образом можно довольно легко и быстро скрыть здание или пещеру, и так же быстро отобразить их содержимое. Единственное, что стоит отметить – это прорисовка текстуры, которая будет скрывать под собой все, должно производится в самом конце, после прорисовки всей карты. Это необходимо, чтобы персонажи, монстры, артефакты и все остальные объекты оказывались под этой текстурой и не были видны нам.
На этом пора заканчивать обзор данного метода. Если у Вас возникнут вопросы. То буду рад ответить на них. Всем пока и удачи в Ваших игровых начинаниях!
Автор: Соколов Виталий
Источник: delgame.at.ua
|