Вторник, 30.04.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нашли свой исходник?
Всего ответов: 94
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Графика » Игры

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

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,*Ваши координаты*);

Надеюсь то что написано в этой статье вам поможет.

Получить ссылку на материал

Категория: Игры | Добавил: Барон (08.12.2011)
Просмотров: 962 | Теги: спрайт | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
DirectX [17]
OpenGL [2]
Игры [15]
Разные [28]
Королевство Delphi © 2010-2024
Яндекс цитирования