Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 669

•  TDictionary Custom Sort  5 800

•  Fast Watermark Sources  5 603

•  3D Designer  8 215

•  Sik Screen Capture  5 913

•  Patch Maker  6 388

•  Айболит (remote control)  6 378

•  ListBox Drag & Drop  5 237

•  Доска для игры Реверси  94 551

•  Графические эффекты  6 570

•  Рисование по маске  5 643

•  Перетаскивание изображений  4 759

•  Canvas Drawing  5 135

•  Рисование Луны  4 863

•  Поворот изображения  4 411

•  Рисование стержней  3 116

•  Paint on Shape  2 360

•  Генератор кроссвордов  3 228

•  Головоломка Paletto  2 551

•  Теорема Монжа об окружностях  3 328

•  Пазл Numbrix  2 200

•  Заборы и коммивояжеры  2 849

•  Игра HIP  1 820

•  Игра Go (Го)  1 740

•  Симулятор лифта  2 072

•  Программа укладки плитки  1 798

•  Генератор лабиринта  2 240

•  Проверка числового ввода  1 925

•  HEX View  2 225

•  Физический маятник  1 911

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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



Оформил: XVeL
Автор: Daddy

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


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




Похожие по теме исходники

Система тестирования




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте