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