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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Листинг 9.3. Функция CreateCustomSurfaces()

BOOL BumperWin::CreateCustomSurfaces() {

DDCOLORKEY ddck;

ddck.dwColorSpaceLowValue = 0;

ddck.dwColorSpaceHighValue = 0;

LPDIRECTDRAWSURFACE surf;

srand(time(0));

CString msg="Can't find ";

surf=CreateSurface("diamond.bmp", TRUE);

if (surf==0) {

msg+="diamond.bmp";

Fatal(msg);

}

surf->SetColorKey(DDCKEY_SRCBLT, &ddck);

sprite[nsprites++]=new Sprite(surf, 0, 0);

sprite[nsprites++]=new Sprite(surf, 150, 0);

surf=CreateSurface("triangle.bmp");

if (surf==0) {

msg+="triangle.bmp";

Fatal(msg);

}

surf->SetColorKey(DDCKEY_SRCBLT, &ddck);

sprite[nsprites++]=new Sprite(surf, 0, 150);

sprite[nsprites++]=new Sprite(surf, 150, 150);

surf=CreateSurface("rect.bmp");

if (surf==0) {

msg+="rect.bmp";

Fatal(msg);

}

surf->SetColorKey(DDCKEY_SRCBLT, &ddck);

sprite[nsprites++]=new Sprite(surf, 0, 300);

sprite[nsprites++]=new Sprite(surf, 150, 300);

surf=CreateSurface("oval.bmp");

if (surf==0) {

msg+="oval.bmp";

Fatal(msg);

}

surf->SetColorKey(DDCKEY_SRCBLT, &ddck);

sprite[nsprites++]=new Sprite(surf, 300, 0);

sprite[nsprites++]=new Sprite(surf, 300, 150);

text=CreateSurface("text.bmp");

if (text==0) {

msg+="text.bmp";

Fatal(msg);

}

text->SetColorKey(DDCKEY_SRCBLT, &ddck);

return TRUE;

}

Функция CreateCustomSurfaces()«раскручивает» генератор случайных чисел с помощью функции time(), возвращающей системное время в секундах. Благодаря этому при каждом запуске программы будут генерироваться разные случайные числа.

Затем для каждой создаваемой поверхности готовится структура DDCOLORKEY. Для всех поверхностей этого приложения прозрачным является черный цвет (то есть нулевое значение).

Функция создает четыре поверхности, и по каждой поверхности — два спрайта. Если хотя бы один из BMP-файлов, по которым создаются поверхности, не будет найден, функция Fatal()выводит сообщение и завершает программу. Для успешно созданных поверхностей с помощью функции SetColorKey()интерфейса DirectDrawSurfaceактивизируются цветовые ключи.

Наконец, поверхность меню textинициализируется содержимым файла TEXT.BMP. Функция SetColorKey(), как и в случае спрайтовых поверхностей, определяет прозрачный цвет. Код возврата TRUEявляется признаком успешного завершения.

Функция DrawScene()

Инициализация приложения завершена, теперь можно заняться функцией DrawScene(). Эта функция выполняет проверку столкновений, строит кадр во вторичном буфере и переключает страницы. В программе Bumper()функция DrawScene()выглядит так:

void BumperWin::DrawScene() {

ASSERT(nsprites>0);

ASSERT(text);

for (int s1=0;s1nsprites;s2++) if (SpritesCollide(sprite[s1], sprite[s2])) {

sprite[s1]->Hit(sprite[s2]);

sprite[s2]->Hit(sprite[s1]);

}

for (int i=0;iUpdate();

ClearSurface(backsurf, 0);

for (i=0;i

Sprite* s=sprite[i];

BltSurface(backsurf, *s, s->GetX(), s->GetY(), TRUE);

}

BltSurface(backsurf, text, 0, 448, TRUE);

primsurf->Flip(0, DDFLIP_WAIT);

}

Проверка столкновений осуществляется во вложенном цикле. Для каждой пары спрайтов вызывается функция SpritesCollide(), а при обнаруженном столкновении вызывается функция Hit(), которой в качестве аргументов передаются оба столкнувшихся спрайта. Напомню, что функция Sprite::Hit()реализует стадию подтверждения в нашей модели проверки столкновений. Она сохраняет данные о столкновении, но не вносит никаких изменений в состояние спрайтов.

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

После того как все столкновения будут обнаружены и обработаны, мы стираем вторичный буфер функцией DirectDrawWin::ClearSurface()и выводим каждый спрайт функцией BltSurface(). Обратите внимание на то, что вторым аргументом BltSurface()является указатель на сам объект Sprite. В данном случае оператор LPDIRECTDRAWSURFACE()преобразует объект Spriteв указатель на поверхность, соответствующую данному спрайту. Также стоит заметить, что координаты спрайтов определяются функциями GetX()и GetY(). После прорисовки всех спрайтов в левом нижнем углу вторичного буфера выводится поверхность меню. Функция Flip()переключает страницы и отображает кадр на экране.

Функция OnKeyDown()

Как видно из меню, программа Bumper реагирует на две клавиши: пробел и Escape. Нажатие пробела приводит к тому, что векторы направлений каждого спрайта пересчитываются заново, а Escapeзавершает работу программы. Функция OnKeyDown()выглядит так:

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

Интервал:

Закладка:

Сделать

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

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


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

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

x