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

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

Все ниже написанное относится к 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 и ОПА!

А теперь тоже самое, но будем использовать 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; 

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

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

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

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