Система рационального создания спрайтов
http://www.codersclub.net/
B примере мы рассмотрим Четыре способа создания спрайтов:
- Аркадный
- Нерациональный
- Рациональный
- Рациональный два
Итак способ первый - Аркадный. Его смысл заключается в том, что процедура создания спрайта описывается в коде заранее, а значит параметры спрайта определены ещё до его появления. Вот пример:
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 //Создаем спрайт и добавляем его в TList list.add(TPlayerSprite.create(spriteengine.engine)); //Устанавливаем его характеристики 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; //Спрайт готов, и в TList он больше не нужен list.clear; end; //Спрайты созданы и Tlist нам больше не нужен list.free; 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,*Ваши координаты*);
Надеюсь то что написано в этой статье вам поможет.