Я продолжаю цикл о создании RPG игры в Delphi. В этот цикл входит несколько статей: создание локации, создание игрока, создание квестов. Сейчас, а именно во второй части цикла мы поговорим о создании спрайтов для карты, которую мы делали в прошлом уроке.
Приступим. Сначала скажу пару слов о том что такое спрайты. Спрайты - это мини изображения используемые программистами, как отдельные объекты персонажей. Сам термин спрайт введен с легкой руки программистов игр. В этом уроке будет использоваться следующие спрайты, некоторых из них нужных нам, вы можете скачать тут:
Распакуйте архив в папку с нашим проектом( Предыдущий урок). Теперь на нашей форме создадим Image1 размерами 32x32 и кинем ровно в верхний левый угол.
Теперь загрузим для него изображение. Для этого изменяем свойство Picture на down_0. То есть меняем наш спрайт. Далее поставьте следующие свойства для Image1:
Proportional - true (включение правильных пропорций размера спрайта) Stretch - true (правильное изменение размера спрайта)
Запускаем игру и видим следующею картину:
За нашим персонажем какое-то белое поле. Как убрать? Легко. Для этого меняем свойство Transparent на true.
И так. Немного отклонюсь от темы. У вас наверняка возникли вопросы по поводу того, что в прошлом уроке я говорил, что Image лучше не трогать, а в этом обратно. Дело в том, что я изначально полагал, что в игре некими объектами(спрайтами) будет компонент Image.
Продолжаю тему. Теперь спрайт имеет прозрачный фон. Жаль что я ошибся с выбором картинки для спрайта. Она как-то сливается с фоном. Ну ладно. Прям сейчас просто обведу черным цветом наши спрайты. Вот что у нас получается:
Теперь нужно сделать управление. Управление будет осуществляться стрелками. То есть мы сейчас разберем как в Delphi сделать нормальное управление стрелками.
Для этого создаем событие для Form1 - FormKeyDown и прописываем следующий полный код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=vk_right then //Если нажата правая стрелка Image1.Left:=Image1.Left+32;
if key=vk_left then //Если нажата левая стрелка Image1.Left:=Image1.Left-32;
if key=vk_up then //Если нажата верхняя стрелка Image1.Top:=Image1.Top-32;
if key=vk_down then //Если нажата нижняя стрелка Image1.Top:=Image1.Top+32; end;
Управление готово. Но без анимации ходьбы скучновато. Поэтому дополняем код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=vk_right then begin Image1.Left:=Image1.Left+32; Image1.Picture.LoadFromFile('sprites/right_0.bmp'); end;
if key=vk_left then begin Image1.Left:=Image1.Left-32; Image1.Picture.LoadFromFile('sprites/left_0.bmp'); end;
if key=vk_up then begin Image1.Top:=Image1.Top-32; Image1.Picture.LoadFromFile('sprites/down_up.bmp'); end;
if key=vk_down then begin Image1.Top:=Image1.Top+32; Image1.Picture.LoadFromFile('sprites/down_up.bmp'); end; end;
Вот что получается:
Ну вот и завершен очередной урок. Удачи вам!
Источник: |