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,*Ваши координаты*);
Надеюсь то что написано в этой статье вам поможет.
|