Стэн Трухильо - Графика для Windows средствами DirectDraw

Здесь есть возможность читать онлайн «Стэн Трухильо - Графика для Windows средствами DirectDraw» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика для Windows средствами DirectDraw: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика для Windows средствами DirectDraw»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Графика для Windows средствами DirectDraw — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика для Windows средствами DirectDraw», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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, которая используется данным спрайтом. Мы уже видели, как GetSurf()используется функцией SpritesCollidePixel(). Перегруженный оператор LPDIRECTDRAWSURFACE()создан для удобства, благодаря ему объекты Spriteможно использовать вместо указателей на поверхности DirectDraw. Как вы увидите позднее, этот перегруженный оператор используется в программе Bumper.

Функции GetX(), GetY(), GetCenterX(), GetCenterY(), SetXY(), SetXYRel()и GetRect()предназначены для работы с положением спрайта. Мы уже видели, как функция GetRect()применяется на практике. В программе Bumper функции GetCenterX()и GetCenterY()используются для определения центральной точки спрайта, по которой определяется новое направление движения после столкновения.

Функция CalcVector()вычисляет вектор направления движения спрайта. Это направление выбирается случайным образом, и его в любой момент можно пересчитать заново.

Две последние функции, Hit()и Update(), уже упоминались выше. Они обеспечивают подтверждение и реакцию на столкновения.

В закрытой ( private) секции объявляются переменные класса Sprite. Первая из них, surf, — указатель на интерфейс DirectDrawSurface, используемый для работы с поверхностью данного объекта Sprite. В переменных x, y, wи hхранятся положение и размеры поверхности. Переменные xincи yincслужат для анимации спрайта. Как вы вскоре увидите, они инициализируются случайными величинами. Эти две переменные определяют направление, в котором движется спрайт.

В самом конце объявляются переменные collideи collideinfo. При обнаружении столкновения логической переменной collideприсваивается значение TRUE, во всех остальных случаях она равна FALSE. Структура collideinfoсодержит информацию о происшедшем столкновении. В данном случае нас интересует лишь положение второго спрайта, участвующего в столкновении.

Сейчас мы подробно рассмотрим все функции класса Sprite. Конструктор класса выглядит так:

Sprite::Sprite(LPDIRECTDRAWSURFACE s, int xx, int yy) {

DDSURFACEDESC desc;

ZeroMemory(&desc, sizeof(desc));

desc.dwSize=sizeof(desc);

desc.dwFlags=DDSD_WIDTH | DDSD_HEIGHT;

s->GetSurfaceDesc(&desc);

surf=s;

x=xx;

y=yy;

w=desc.dwWidth;

h=desc.dwHeight;

collide=FALSE;

CalcVector();

}

Конструктор получает в качестве аргументов указатель на поверхность DirectDraw и исходное положение спрайта. Сохранить эти значения в переменных класса нетрудно, однако мы еще должны инициализировать переменные ширины и высоты ( wи h). Для этого необходимо запросить у поверхности DirectDraw ее размеры. С помощью структуры DDSURFACEDESCи функции GetSurfaceDesc()мы узнаем размеры и присваиваем нужные значения переменным. Переменной collideприсваивается значение FALSE(потому что столкновение еще не было обнаружено). Наконец, мы вызываем функцию CalcVector(), которая определяется так:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Графика для Windows средствами DirectDraw»

Представляем Вашему вниманию похожие книги на «Графика для Windows средствами DirectDraw» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика для Windows средствами DirectDraw»

Обсуждение, отзывы о книге «Графика для Windows средствами DirectDraw» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x