Я продолжаю цикл о создании RPG игры в Delphi. В этот цикл входит несколько статей: создание локации, создание игрока, создание квестов. Сейчас, а именно во второй части цикла мы поговорим о создании спрайтов для карты, которую мы делали в прошлом уроке.
![](http://professional-pc.ucoz.ru/_pu/0/97624305.jpg) Как вы помните мы сделали спрайт главного героя и научили его передвигаться. Теперь я решил показать как сделать врага. Статья не обязательна для следующих этапов создания RPG, однако она будет очень полезна в плане пополнения знаний. Спрайты врага: скачатьСкачиваем спрайты врага и распаковываем в папку sprites. По желанию в процессе урока вы можете нарисовать сами нужные спрайты.
Сейчас давайте добавим на нашу карту еще один Image, поставим все свойства, почти как и у прошлого спрайта:
Proportional - true Stretch - true Transparent - true Height - 32 Width - 32 Top - 64 Left - 64
Ну и для удобства меняем Name на enemy. Загрузим изображение нашего спрайта - enemy. Надеюсь вы помните из прошлого урока, как это делается.
Теперь нужно оживить врага и заставить нападать на игрока. Для этого создаем событие для Form1 - FormCreate и прописываем код:
attak:=false;
Кстати. Забыл. Нужно создать глобальную переменную attak:
... var Form1: TForm1; attak : boolean; ...
Теперь скидываем Timer из вкладки System и создаем для него событие Timer1Timer и прописываем следующий полный код:
procedure TForm1.Timer1Timer(Sender: TObject); begin
if attak=false then begin enemy.Picture.LoadFromFile('sprites/enemy.bmp'); if (Image1.Top=enemy.Top) and (Image1.Left<=enemy.left-image1.left) then enemy.Left:=enemy.left-32; if enemy.left= image1.Left then enemy.left:=enemy.left+32; attak:=true; end else begin if (Image1.Top=enemy.Top) and (Image1.Left<=enemy.left-image1.left) then enemy.Left:=enemy.left-32;
if enemy.left= image1.Left then begin enemy.Picture.LoadFromFile('sprites/enemy_attak.bmp'); enemy.left:=enemy.left+32; end;
attak:=false; end;
end;
Код вышел большим, но понятным, так что комментарии я не стал писать. Если что не понятно - спрашиваем!
Как вы видите противник ходит за нами и даже изображает атаку.
Давайте дадим ему сдачи! В событие FormKeyDown добавляем:
if key=vk_space then begin Image1.Picture.LoadFromFile('sprites/down_up.bmp'); if (enemy.Left=image1.Left) and (enemy.Top=image1.Top) then enemy.visible:=false; end;
Получается если подойти к врагу вплотную и нажать Пробел, то он исчезнет.
Ну вот и все. Снова желаю удачи и снова прощаюсь!
Источник: |