Как
делать магию в играх.
В сегодняшней статье хотелось бы
поговорить о реализации магических заклинаний в компьютерных играх. Ведь магия
в играх гораздо зрелищней простых ударов персонажей. А зрелищность игры влияет
на ее популярность. Среди новичков бушует мнение, что создание магии – очень
трудное и время затратное занятие. Но на самом деле нужно лишь понять как это
все работает. Мы попробуем на простом примере разобрать этапы создания магии в
компьютерных играх.
Во первых следует понять что магия делится
на две части. Первая часть – это графика. Графика отображает на экране
магические события и их влияние на окружающий мир. Изначально художник или
дизайнер подготавливает изображения магического заклинания.
Мы рассмотрим пример создания заклинания
«зыбучий песок». Подготавливаем (рисуем) изображения кадров анимации зыбучего
песка для одноименного заклинания. Допустим, будет 4 кадра анимации. Теперь
закидываем наши картинки в папку с игрой и загружаем их в отдельные переменные
или нужный графический массив. При варианте с отдельными переменными пишем
примерно следующий код:
Var
Kadr1,kadr2,kadr3,kadr4:TBitmap;
Kadr1:=TBitmap.Create;
Kadr1.Transparent:=true;
Kadr1.LoadFromFile(‘Kadr1.bmp’);
Kadr2:=TBitmap.Create;
Kadr2.Transparent:=true;
Kadr2.LoadFromFile(‘Kadr1.bmp’);
Kadr3:=TBitmap.Create;
Kadr3.Transparent:=true;
Kadr3.LoadFromFile(‘Kadr1.bmp’);
Kadr4:=TBitmap.Create;
Kadr4.Transparent:=true;
Kadr4.LoadFromFile(‘Kadr1.bmp’);
Для варианта с массивом все обстоит
гораздо проще:
Var
Kadri:array[1..4]
of TBitmap;
I:integer;
For i:=1
to 4 do
Begin
Kadri[i]:=TBitmap.Create;
Kadri[i].LoadFromFile(‘Kadr’+inttostr(i)+’.bmp’);
End;
Далее для прорисовки данных кадров
добавляем компонент Timer.
И уже в нем (дважды кликнув по нему мышкой) организовываем запуск и смену
кадров анимации. Например, делаем запуск анимации при нажатии клавиши "d”. Для этого в свойстве формы OnKeyPress
пишем:
Var
Magic:Boolean;
If
key=’Ad’ then Magic:=true;
Number:=1;
А в таймере проверяем на запуск магии,
если нужно:
Var
Number:integer;
If
magic=true then
Begin
Form1.Canvas.Draw(Player.X,
Player.Y, Kadri[ number ]);
Number:=number+1;
If
number>4 then magic:=false;
End;
Теперь когда с графической частью
разобрались, пришло время реализовывать вторую часть – математическую. Эта часть
отвечает за нанесение урона магией и вообще за влияние магии на игровой мир и
предметы, существа в нем. Например здесь можно определить радиус влияния
магического заклинания. Например, игровой мир поделен на клеточки (ячейки)
размером 64х64 пикселей. А размер картинок кадров анимации 192х192 пикселя.
Выходит эти картинки в игровом мире будут занимать область 3х3 ячейки. Значит
можно радиусу присвоить единицу. Так как поставив центр картинки в любую
ячейку, ее края будут выступать во все стороны на 64 пикселя (одну игровую
ячейку).
В случае, если заклинание вляет лишь на
одну клеточку, то можно радиус присвоить нулю. Также на этом этапе нужно
определить что же бужет делать наше заклинание? Каким образом будет оно влиять
на игровой процесс? Например, пускай оно наносит урон монстрам, находятся на
соседних клетках. Тогда алгоритм действия магического заклинания будет
выглядеть следующим образом:
If
Radius>0 then
begin
For i:=-Radius to radius do
For j:=-radius to radius do
If map[ Player.x+I, Player.Y+j
].Monsters>0 then
Monsters[map[
Player.x+I, Player.Y+j].Monsters ] ].Health:=
Monsters[map[
Player.x+I, Player.Y+j].Monsters ] ].Health-10;
End;
И сюда же добавляем проверку на смерть
монстров, ведь наше заклинание может не только ранить соперников, но и
уничтожать их. Проверяем сколько здоровья у монстров осталось. Если здоровья
меньше или равно нулю, значит монстр мертв или невидим.
If
Monsters[map[ Player.x+I, Player.Y+j].Monsters ] ].Health<=0 then
Monsters[map[
Player.x+I, Player.Y+j].Monsters ] ].Visible:=false;
Как видно из кода выше, в МАР[…].monsters хранится номер монстра, если в этой
клеточке есть монстр или ноль – если монстра нет. Возникает вопрос, а куда же
вписывать данный код? В принципе можно его добавить в таймер после анимации и запускать
данный алгоритм либо на каждом кадре либо на первом или последнем кадре.
Смотрим по обстоятельствам. Для этого нужно перед запуском алгоритма сделать
проверку. Например для последнего кадра:
If
number=4 then
Begin
//Текст алгоритма
End;
Запускать в игре магию можно при нажатии
клавишь, достижения (прохождения по) определенной ячейке, нажатию на игровых
картинках, по времени и многим другим способам. Надеюсь теперь Вам станет
понятен смысл создания магии магии. И никто не будет бояться делать магию в
своих играх. Ведь создание магии – это довольно легко и понятно.
Таким образом магия в компьютерной игре
создана. Все показано довольно примитивно и просто, но зато работоспособно.
Ведь у нас и ставилась задача – научить новичков понимать суть и этапы создания
магии в компьютерной игре.
На этом у меня сегодня все. Всем удачи в
создании своих игр. Все отзывы оставляйте на форуме этого сайта. Заранее всем
благодарен.
Источник: delgame.at.ua
|