Графика для Windows средствами DirectDraw


Класс Sprite - часть 2


Класс Sprite эти правила соблюдает и, следовательно, справляется со всеми проблемами. Для этого обработка каждого столкновения осуществляется за две стадии, которые мы назовем подтверждением (acknowledgment) и реакцией

(reaction). На стадии подтверждения спрайт всего лишь сохраняет статус и положение другого спрайта— его собственное положение и статус остаются неизменными. Затем, на стадии реакции, по ранее сохраненным данным определяются дальнейшие действия, вызванные столкновением. На этой стадии положение и статус спрайта могут изменяться. Функция Hit() класса Sprite используется для подтверждения, а функция Update() — для реакции. Класс Sprite определяется так:


class Sprite { public: Sprite(LPDIRECTDRAWSURFACE, int x, int y); LPDIRECTDRAWSURFACE GetSurf() { return surf; } operator LPDIRECTDRAWSURFACE() const { return surf; } int GetX() { return x; } int GetY() { return y; } int GetCenterX() { return x+w/2; } int GetCenterY() { return y+h/2; } void SetXY(int xx, int yy) { x=xx; y=yy; } void SetXYrel(int xx,int yy) { x+=xx; y+=yy; } CRect GetRect(); virtual void Update(); void Hit(Sprite*); void CalcVector(); private: LPDIRECTDRAWSURFACE surf; int x, y; int w, h; int xinc, yinc;

BOOL collide; struct CollideInfo { int x, y; } collideinfo; };


Конструктор класса Sprite

получает три аргумента: указатель на поверхность DirectDraw, изображающую новый спрайт, и два целых числа, определяющих начальное положение спрайта. Так как конструктору передается поверхность DirectDraw, одна и та же поверхность может использоваться для нескольких спрайтов. Конструктор можно было бы написать так, чтобы в качестве аргумента он получал имя BMP-файла и сам создавал поверхность, но тогда каждый спрайт был бы связан с отдельной поверхностью — даже если для создания нескольких спрайтов используется один и тот же BMP-файл.

Две следующие функции делают одно и то же, но имеют разный синтаксис. Функция GetSurf() и оператор-функция operator LPDIRCETDRAWSURFACE() возвращают указатель на поверхность DirectDraw, которая используется данным спрайтом.


Начало  Назад  Вперед



Книжный магазин