Система рационального создания спрайтов

B примере мы рассмотрим Четыре способа создания спрайтов:
1. Аркадный
2. Нерациональный
3. Рациональный
4. Рациональный два
Итак способ первый - Аркадный. Его смысл заключается в том, что процедура создания спрайта описывается в коде заранее, а значит параметры спрайта определены ещё до его появления. Вот пример:


constructor TPlayerSprite.Create(AParent: TSprite);  
begin  
   inherited Create(AParent);  
   Image := MyForm.ImageList.Items.Find('PlayerScate');  
   Width := Image.Width;  
   Height := Image.Height;  
   X := 20;  
   Y := 240-Height div 2;  
   Z := 2;  
   PixelCheck:=true;  
   AnimCount := Image.PatternCount;  
   AnimLooped := True;  
   AnimSpeed := 0/1000;  
end;   

Минус сей идеи в том, что каждый раз спрайт будет появлятся в одном и том же месте (в примере по Икс=20 и по Игрик=240 минус половину высоты картинки). Такой способ хорош только для аркад - где главный герой появляется строго в заданном месте.

Второй способ - нерациональный. Каждому спрайту придумать свое имя (не путать с классом). Покажу на примере как это:


procedure TMainForm.FormCreate(Sender: TObject);  
var MASHINA : TplayerSprite; //Вот оно имя спрайта - MASHINA  
begin  
   mashina:=TplayerSprite.create(spriteengine.engine);  
   with TplayerSprite(mashina) do  
   begin  
      Image := MyForm.ImageList.Items.Find('PlayerScate');  
      Width := Image.Width;  
      Height := Image.Height;  
      X := 20;  
      Y := 240-Height div 2;  
      Z := 2;  
      PixelCheck:=true;  
      AnimCount := Image.PatternCount;  
      AnimLooped := True;  
      AnimSpeed := 0/1000;  
   end;  
end;  

Минус этой идеи в том, что спрайтов можно использовать ограниченное количество (только те которые так описаны и имеют свое имя), таким образом чтобы создать 100 спрайтов надо 100 раз написать эту функцию и придумать 100 разных имен!

И вот наконец 3-й - Рациональный способ. Его идея состоит в том, чтобы создать TList добавить в него нужное кол-во спайтов и обработать их в нем.
Вот пример для создания сотни спрайтов класса TPlayerSprite стоящих в ряд:


Procedure TMainForm.StartGameScene;  
var  
   i:integer; //Переменная счета  
   List : Tlist;  
begin  
   List:=Tlist.create;  
   for i:=1 to 100 do  
   begin  
      list.add(TPlayerSprite.create(spriteengine.engine));//Создаем спрайт и добавляем его в TList  
      with TplayerSprite(list.items[0]) do //Устанавливаем его характеристики  
      begin  
         Image := MyForm.ImageList.Items.Find('PlayerScate');  
         Width := Image.Width;  
         Height := Image.Height;  
         X := 20+width*i; //Ставим его на место в ряд по номеру  
         Y := 240-Height div 2;  
         Z := 2;  
         PixelCheck:=true;  
         AnimCount := Image.PatternCount;  
         AnimLooped := True;  
         AnimSpeed := 0/1000;  
      end;  
      list.clear; //Спрайт готов, и в TList он больше не нужен  
   end;  
   list.free; //Спрайты созданы и Tlist нам больше не нужен  
end;   

У этого варианта нет минусов. Именно "мутации" этой идеи используются в большинстве проффесиональных игр.

Совсем забыл вот ещё четвертый:


Type  
   TOrc = class(TImageSprite) //Орк становится подклассом  
   public  
      constructor Create(AParent: TSprite;nx,ny:double);  
   end;  
  
//А вот сама процедура:  
constructor TOrc.Create(AParent: TSprite;nx,ny:double);  
begin  
   inherited Create(AParent);  
   image:=myform.il.Items.Find('stand'); //Ну или свою картинку  
   width:=image.Width;  
   height:=image.Height;  
   x:=nx;  
   y:=ny;  
   //Тут чего нить свое  
end;   

Работает как часы! Орк(в примере) создается командой:
Torc.create(spriteengine.engine,*Ваши координаты*);

Надеюсь то что написано в этой статье вам поможет.
Теги:
спрайт
Добавлено: 30 Июля 2018 19:54:33 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...