Анимация спрайтов
Оформил: XVeL
Автор: Daddy
WEB-сайт: http://daddy.mirgames.ru
Щас мы будем анимировать спрайт. Он будет состоять из 6 промежуточных фаз.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Должно получиться что-то похожее на это:

Сначала сделаем без использования 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;
Далее: Аркадный движок »»