MIDlet Pascal
Поиск по сайту
Форма входа

Статистика

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


Яндекс.Метрика

Друзья сайта
IT юмор - развлечения
Заработать в интернете - легко!Просто сиди и кликай.
Четверг, 15.11.2018, 01.20.28
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Урок №3 - Передвижения персонажа!
И первое с чего начнем, так это изображения)


2.png3.png4.png - передвижение персонажа вниз

5.png6.png7.png - передвижение персонажа ввверх

8.png9.png10.png - передвижение персонажа влево

11.png12.png13.png - передвижение персонажа вправо

Новые переменные!
  anim,tanim,n:integer; - необходимы для анимации ерни)
  prox,proy:integer; - необходимо для коректировки карты и персонажа между друг другом)

Новые Процедуры/функции!
procedure DrawPers;
Begin
  if (tanim=1) then anim:=1;
  if (tanim=4) then anim:=3;
  if (tanim=7) then anim:=1;
  if (tanim=10) then anim:=2;
  if (tanim=13) then tanim:=0;
  if (n=0) then n:=3;
  if (n=1) then DrawImage(img[4+anim],(width/2),(height/2)-35);
  if (n=2) then DrawImage(img[10+anim],(width/2),(height/2)-35);
  if (n=3) then DrawImage(img[1+anim],(width/2),(height/2)-35);
  if (n=4) then DrawImage(img[7+anim],(width/2),(height/2)-35);
  if (key=GA_UP) then
  Begin
    n:=1;
    tanim:=tanim+1;
    y:=y-3;
  End else
  if (key=GA_DOWN) then
  Begin
    n:=3;
    tanim:=tanim+1;
    y:=y+3;
  End else
  if (key=GA_RIGHT) then
  Begin
    n:=2;
    tanim:=tanim+1;
    x:=x+3;
  End else
  if (key=GA_LEFT) then
  Begin
    n:=4;
    tanim:=tanim+1;
    x:=x-3;
  End else tanim:=0;

  SetColor(255,255,0);
  DrawText(''+(x/30)+':'+(y/30),3,3);
End;

Розбераем)
  if (tanim=1) then anim:=1;
  if (tanim=4) then anim:=3;
  if (tanim=7) then anim:=1;
  if (tanim=10) then anim:=2;
  if (tanim=13) then tanim:=0; - это произвидения и будет делать анимацию при передвижении, но в отличии от простых анимаций вроде (1,2,3,1,2,3) оно делает (1,3,1,2,1,3,1,2)

  if (n=0) then n:=3; - устанавливает начальный поворот перса,
тоесть куда он будет смотреть
(1 - вверх,2 - вправо,3 - вниз,4 - влево)
выбрано 3 чтоб лицом к экрану появлялся)


  if (n=1) then DrawImage(img[4+anim],(width/2),(height/2)-35);
  if (n=2) then DrawImage(img[10+anim],(width/2),(height/2)-35);
  if (n=3) then DrawImage(img[1+anim],(width/2),(height/2)-35);
  if (n=4) then DrawImage(img[7+anim],(width/2),(height/2)-35);
- прорисовка персонажа, особо комментировать
нечего, вобщем на каждый из поворотов есть
отдельные изображения которые вы добавили еще
в начале, и аннимация при простое она ровна 0
тоесть перс не двигается, а при движении будет
воспроизводится анимация, для создания анимаций
существует очень много направлений я же показал
лишь один)


if (key=GA_*) then - здесь условие нажата ли клавиша * мы будем использовать лиш GA_LEFT,GA_RIGHT,GA_UP,GA_DOWN;
  Begin
    n:=*; - это поворот он может принимать от (1..4) цыфру)
    tanim:=tanim+1; - это темп анимации при передвижении он прибавляется)
    *:=*; - здесь же используетсясамо ппередвижения персонажа оно либо (х) либо (у) смотря что нажато).
  End else


  SetColor(255,255,0); - устанавливаем желтый цвет чтоб было повиднее)
  DrawText(''+(x/30)+':'+(y/30),3,3); - выводим подсказку где мы находимся по кардинатам,
поскольку карту рисовали мы 10х10 и клетка размером
30х30 то если подойти к концу карты кординаты будут 10х10)

Обновляем важное)
Обновим в процедуре 'DrawMaps'
  DrawImage(img[1],(map_x*30)+x,(map_y*30)+y); - эту стоку
  DrawImage(img[1],prox+(map_x*30)-x,proy+(map_y*30)-y); - на вот эту

Главный цыкл розмещаем таким образом

begin
  LoadImages;
  prox:=width/2;
  proy:=height/2;
  anim:=1;
Repeat
  key:=keyToAction(getKeyPressed);
  k:=keyToAction(getKeyClicked);
  Background;

  DrawMaps;
  DrawPers;

  Repaint;
  Delay(15);
  until false;
end.


Весь код выглядит так
program erni;
const
  image_count=13;
  width=240;
  height=320;

var
  key,k,x,y:integer;
  temp:integer;
  anim,tanim,n:integer;
  prox,proy:integer;
  img:array[1..image_count] of  image;

procedure LoadImages;
Begin
  For temp:=1 To image_count Do
  img[temp]:=LoadImage(''+temp+'.png');
End;

procedure Background;
Begin
 SetColor(150,150,150);
 FillRect(0,0,width,height);
End;

procedure DrawMaps;\
var
 map_x:integer;
 map_y:integer;
Begin
 For map_x:=0 To 10 Do
 For map_y:=0 To 10 Do\
 DrawImage(img[1],(map_x*30)+x,(map_y*30)+y);
End;

procedure DrawPers;
Begin
  if (tanim=1) then anim:=1;
  if (tanim=4) then anim:=3;
  if (tanim=7) then anim:=1;
  if (tanim=10) then anim:=2;
  if (tanim=13) then tanim:=0;
  if (n=0) then n:=3;
  if (n=1) then DrawImage(img[4+anim],(width/2),(height/2)-35);
  if (n=2) then DrawImage(img[10+anim],(width/2),(height/2)-35);
  if (n=3) then DrawImage(img[1+anim],(width/2),(height/2)-35);
  if (n=4) then DrawImage(img[7+anim],(width/2),(height/2)-35);
  if (key=GA_UP) then
  Begin
    n:=1;
    tanim:=tanim+1;
    y:=y-3;
  End else
  if (key=GA_DOWN) then
  Begin
    n:=3;
    tanim:=tanim+1;
    y:=y+3;
  End else
  if (key=GA_RIGHT) then
  Begin
    n:=2;
    tanim:=tanim+1;
    x:=x+3;
  End else
  if (key=GA_LEFT) then
  Begin
    n:=4;
    tanim:=tanim+1;
    x:=x-3;
  End else tanim:=0;

  SetColor(255,255,0);
  DrawText(''+(x/30)+':'+(y/30),3,3);
End;

begin
  LoadImages;
  prox:=width/2;
  proy:=height/2;
  anim:=1;
Repeat
  key:=keyToAction(getKeyPressed);
  k:=keyToAction(getKeyClicked);
  Background; {зарисовка экрана}

  DrawMaps;
  DrawPers;

  Repaint;
  Delay(15);
  until false;
end.

Всем спосибо,
Ждите следующих уроков
Автор: Андрей Ступницкий
Если вы нашли ошибки/очепятки в тексте то сообщите о них на форуме
А также можете заказать программу/игру на этой странице

www.parkflyer.ru - радиоуправляемые модели, радиоуправляемые модели самолетов, магазин радиоуправляемых моделей
Роспись стен, скульптуры на заказ
Wladymyr © 2012-2018
Создать бесплатный сайт с uCoz