![]() |
![]() ![]() ![]() ![]() |
|
Система рационального создания спрайтовDelphi , Графика и Игры , DirectX и DelphiX
Оформил: XVeL 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, *Ваши координаты*); Надеюсь то что написано в этой статье вам поможет. Система рационального создания спрайтов - это способ создания множества спрайтов с уникальными характеристиками, минуя ограничения традиционных способов создания спрайтов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: DirectX и DelphiX ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||