Меню сайта
Форма входа

Категории раздела
Уроки по созданию игр [38]
Программирование игр разной сложности
Игровые алгоритмы [24]
Алгоритмы, которые уже реализованы для разных жанров игр
Графика [5]
Учимся работать с графикой в Делфи
Мультимедиа [3]
Работа с мультимедийными возможностями Делфи
Другие статьи [18]
Статьи не вошедшие не в один из разделов
Ошибки [4]
Всевозможные ошибки и пути их решения
Понедельник, 29.04.2024, 12:02
Приветствую Вас Гость

Статьи по программированию

Главная » Статьи » Игровые алгоритмы

Реализация (создание) игровых зданий и пещер

Реализация (создание) игровых зданий и пещер.

 

При создании многих жанров игр, а в особенности экшенов и ролевых 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

Категория: Игровые алгоритмы | Добавил: Armageddets (25.02.2015) | Автор: Реализация (создание) игровых здани
Просмотров: 1557 | Теги: делфи, скрытие интерьера, вход в здания, другие режимы игры, Реализация (создание) игровых здани | Рейтинг: 1.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Какие уроки по созданию игр Вам удобнее?
Всего ответов: 141
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

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