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

•  DeLiKaTeS Tetris (Тетрис)  222

•  TDictionary Custom Sort  3 381

•  Fast Watermark Sources  3 136

•  3D Designer  4 893

•  Sik Screen Capture  3 389

•  Patch Maker  3 592

•  Айболит (remote control)  3 796

•  ListBox Drag & Drop  3 059

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

•  Графические эффекты  3 991

•  Рисование по маске  3 293

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

•  Canvas Drawing  2 803

•  Рисование Луны  2 621

•  Поворот изображения  2 232

•  Рисование стержней  2 182

•  Paint on Shape  1 583

•  Генератор кроссвордов  2 259

•  Головоломка Paletto  1 783

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

•  Пазл Numbrix  1 696

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

•  Игра HIP  1 293

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

•  Симулятор лифта  1 489

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

•  Генератор лабиринта  1 561

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

•  HEX View  1 508

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

 
скрыть


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

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



Delphi Sources

Анимация спрайтов



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

Все ниже написанное относится к Delphi 5, в более старых версиях возможны отличия, а может и нет, не знаю.

Щас мы будем анимировать спрайт. Он будет состоять из 6 промежуточных фаз.

Я его выдрал из Сеговской игрушки "Asterix & Obelix" (при помощи эмулятора), а Вы, если обладаете талантом, можете его нарисовать, ну или тоже выдрать :).
Должно получиться что-то похожее на это:

Сначала сделаем без использования DXSpriteEngine:
Создадим форму MainForm
На форме создадим
DXDraw, размером где-то 150x150,
DXImageList и
DXTimer
Красиво? :), щас будет еще красивее.
Теперь в Properties DXImageList'а делаем:
DXDraw = DXDraw или как Вы там его обозвали.
ВItems добавляем поочередно наши спрайтики в TPictureCollection, для каждого спрайта указывается TransparentColor, в моем случае это $00FFC0C0 (вылез автоматически).
Вооот, теперь значицца в DXTimer Properties ставим:
ActiveOnly = True
Enabled = True
Interval = 150, чем больше, значение, тем больше задержка, между выводом картинок.
В Events'ах DXTimer'a:
OnTimer щелкаем пару раз, создается процедура DXTimerTimer, вставляем туда кусок:

const //Это перед Begin
  n:integer=0; //Это перед Begin

if not DXDraw.CanDraw then Exit; //Это понятно
DXDraw.Surface.Fill(15); //Делаем поверхность синей (15)
DXImageList.Items[n].Draw(DXDraw.Surface,50,50,0); 
//Здесь выводим спрайт № n на поверхность DXDraw в координаты 50х50 со значением Transparent=0
DXDraw.Flip; //Это переключит поверхности.
if n > 5 then inc(n) else n:=0; //Здесь переключим счетчик на следующую картинку
Теперь давим Run и ОПА!
Исходник и спрайты можете взять Здесь sampl1.zip (12Kb).

А теперь тоже самое, но будем использовать DXSpriteEngine:
Все промежуточные фазы хранятся в одном файле:

Будем использовать первые 6 кадров.
Так как все спрайты объединены в одной картинке, то необходимо сделать следующее:

То есть установить ширину и высоту кадра (при чем высота нужна только в случае 2-мерного массива кадров)

type
   TSprite = class(TImageSprite)
   end;

procedure TForm1.FormCreate(Sender: TObject);
Var
   Sprite:TImageSprite;
begin
   Sprite := TSprite.Create(DXSpriteEngine.Engine);
   with TSprite(Sprite) do
   begin
      Image := DXImageList.Items.Find('sprite');
      AnimStart:=0;
      AnimLooped:=true;
      AnimCount:=6;
      AnimSpeed:=100/1000;
      x:=100;
      y:=100;
      Z:=0;
   end;
end;

procedure TForm1.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
   DXSpriteEngine.Move(1);
   DXDraw.Surface.Fill(15);
   DXSpriteEngine.Draw;
   DXDraw.Flip;
end;







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

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