Спрайты

Экземпляры класса SpriteClass (Листинг 1.3) обеспечивают анимацию одной маскируемой фигуры. Банк данных спрайта содержит канву невидимой компоненты TImage с битовыми образами фаз. Естественно, что все изображения банка данных спрайта должны быть одинакового размера. Изображения фаз анимации должны иметь черный фон, маска контура - белый.

classSpriteClass

private:

TCanvas *SpriteCanvas;

int ImageLeft, ImageTop;

int MaskLeft, MaskTop;

int Width, Height;

public:

void SetSprite(TCanvas *aSpriteCanvas, int aImageLeft,int aImageTop, int aMaskLeft,int aMaskTop, int aWidth,int aHeight);

void Draw( TCanvas *aDrawCanvas,int aLeft,int aTop) ;

Листинг 1.3. Объявление класса спрайта в файле Spite. h.

В классе спрайта определены только два метода установки и рисования спрайта (Листинг 1.4). При вызове метода SetSprite аргументы aImageLeft и aImageTop определяют позицию спрайта на канве aSpriteCanvas, аргументы aMaskLeft и MaskTop - позицию маски, аргументы aWidth и aHeight - размеры спрайта. При вызове метода Draw аргумент aDrawCanvas задает канву рисования, а аргументы aLeft и aTop - позицию спрайта на этой канве.

void SpriteClass::SetSprite(TCanvas *aSpriteCanvas, int aImageLeft, int aImageTop, int aMaskLeft, int aMaskTop, int aWidth, int aHeight)

{ SpriteCanvas = aSpriteCanvas;

ImageLeft = aImageLeft;

ImageTop = aImageTop;

MaskLeft = aMaskLeft;

MaskTop = aMaskTop;

Width = aWidth;

Height = aHeight;

} void SpriteClass::Draw(TCanvas *aDrawCanvas, int aLeft,int aTop)

{ aDrawCanvas->CopyMode = cmSrcAnd;

aDrawCanvas->CopyRect(Rect(aLeft, aTop, aLeft+Width, aTop+Height), SpriteCanvas, Rect(MaskLeft, MaskTop, MaskLeft+Width, MaskTop+Height));

aDrawCanvas->CopyMode = cmSrcPaint;

aDrawCanvas->CopyRect(Rect(aLeft, aTop, aLeft+Width, aTop+Height), SpriteCanvas, Rect(ImageLeft, ImageTop, ImageLeft+Width.ImageTop+Height));

}

Листинг 1.4. Определение методов класса спрайта в файле Sprite.cpp.

спрайты - student2.ru

Рис. 1.3. Снимок с экрана работающего приложения MOVEIT.

Взгляните на изображения фаз анимации самолета или вертолета. На второй фазе каждой фигуры пропеллер просто отсутствует. Постоянно переключая фазы, можно создать иллюзию вращения пропеллера. Можно придумать какой-нибудь другой впечатляющий эффект, например, стреляющего пулемета. Расширяя банк данных спрайта дополнительными фазами фигур и соответствующими масками, можно добиваться различных эффектов.

Контрольные вопросы.

1. Что называется спрайтом?

2. Дайте определение термина канва.

3. Сколько битовых образов необходимо для представления фигуры в редакторе изображений?

4. Что включает в себя описание структуры FigureType?

5. Какие элементы управления использованы в данной программе?

6. Как сделать анимацию более реальной?

Наши рекомендации