Система рационального создания спрайтов
Оформил: XVeL
Автор: Daddy
WEB-сайт: http://daddy.mirgames.ru
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, *Ваши координаты*);
Надеюсь то что написано в этой статье вам
поможет.
|