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


Авторские права

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

Здесь можно скачать бесплатно "Стэн Трухильо - Графика для Windows средствами DirectDraw" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Стэн Трухильо - Графика для Windows средствами DirectDraw
Рейтинг:
Название:
Графика для Windows средствами DirectDraw
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Графика для Windows средствами DirectDraw"

Описание и краткое содержание "Графика для Windows средствами DirectDraw" читать бесплатно онлайн.








  collide=FALSE;

 }

 x+=xinc;

 y+=yinc;

 if (x>640-w/2) {

  xinc=-xinc;

  x=640-w/2;

 }

 if (x<-(w/2)) {

  xinc=-xinc;

  x=-(w/2);

 }

 if (y>480-h/2) {

  yinc=-yinc;

  y=480-h/2;

 }

 if (y<-(h/2)) {

  yinc=-yinc;

  y=-(h/2);

 }

}

Сначала Update() проверяет состояние логической переменной collide. Если переменная равна TRUE, мы получаем данные о положении двух спрайтов (текущего и столкнувшегося с ним) и используем их для вычисления новой траектории текущего спрайта. При этом используется схема, очень далекая от настоящей физической модели — при столкновении каждый спрайт отлетает в направлении, противоположном направлению удара.

Затем переменные x и y обновляются с учетом значений xinc и yinc. Новое положение спрайта проверяется и при необходимости корректируется. Корректировка происходит, когда спрайт более чем наполовину уходит за край экрана.

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

Программа Bumper 

Для проверки алгоритма мы напишем демонстрационную программу. Программа Bumper выполняет отображение и анимацию восьми спрайтов. Как я упоминал, при столкновении спрайты разлетаются в противоположных направлениях. Программа Bumper изображена на рис. 9.4.

Рис. 9.4. Программа Bumper


Восемь спрайтов, показанных на рисунке, представлены четырьмя разными поверхностями — по каждой поверхности создаются два спрайта. Исходные векторы направления, по которым перемещаются спрайты, определяются случайным образом. В начале своей работы программа «раскручивает» генератор случайных чисел, чтобы результаты ее работы не были всегда одинаковыми. При нажатии клавиши пробела векторы направления пересчитываются заново. Код программы Bumper рассматривается в следующих разделах. 

Класс BumperWin 

Программа Bumper, как и все остальные программы в этой книге, построена на основе базового класса DirectDrawWin. Производный от него класс BumperWin определяется так:

class BumperWin : public DirectDrawWin {

public:

 BumperWin();

protected:

 //{{AFX_MSG(BumperWin)

 afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);

 afx_msg void OnDestroy();

 //}}

 AFX_MSG DECLARE_MESSAGE_MAP()

private:

 int SelectDriver();

 int SelectInitialDisplayMode();

 BOOL CreateCustomSurfaces();

 void DrawScene();

 void RestoreSurfaces();

 BOOL SpritesCollide(Sprite* s1, Sprite* s2);

 BOOL SpritesCollideRect(Sprite* s1, Sprite* s2);

 BOOL SpritesCollidePixel(Sprite* s1, Sprite* s2);

private:

 Sprite* sprite[MAX_SPRITES];

 int nsprites;

 LPDIRECTDRAWSURFACE text;

};

В нем объявляются два обработчика сообщений. Функция OnKeyDown() обрабатывает нажатия клавиш, а функция OnDestroy() освобождает спрайты в конце работы программы.

Функции SelectDriver(), SelectInitialDisplayMode(), CreateCustomSurfaces(), DrawScene() и RestoreSurfaces() наследуются от класса DirectDrawWin. Вскоре мы подробно рассмотрим каждую из этих функций. Функции SpritesCollide(), SpritesCollideRect() и SpritesCollidePixel() совпадают с одноименными функциями, описанными выше, однако на этот раз они принадлежат классу BumperWin. Поскольку эти функции уже рассматривались, мы не будем обсуждать их снова.

В классе объявлены три переменные: массив указателей на объекты Sprite, целая переменная для хранения общего количества спрайтов и указатель text на интерфейс DirectDrawSurface. Первые две переменные предназначены для хранения спрайтов и последующих обращений к ним. Указатель text используется для отображения меню, находящегося в левом нижнем углу экрана. 

Инициализация приложения 

При запуске программы Bumper прежде всего вызывается функция SelectDriver(). Чтобы добиться максимальной гибкости, при наличии нескольких драйверов DirectDraw программа Bumper выводит меню. Функция SelectDriver() выглядит так:

int BumperWin::SelectDriver() {

 int numdrivers=GetNumDrivers();

 if (numdrivers==1) return 0;

 CArray<CString, CString> drivers;

 for (int i=0;i<numdrivers;i++) {

  LPSTR desc, name;

  GetDriverInfo(i, 0, &desc, &name);

  drivers.Add(desc);

 }

 DriverDialog dialog;

 dialog.SetContents(&drivers);

 if (dialog.DoModal()!=IDOK) return -1;

 return dialog.GetSelection();

}

С помощью класса DriverDialog программа выводит меню со списком драйверов и использует драйвер, выбранный пользователем. Наши функции проверки столкновений предназначены только для 8-битных поверхностей, поэтому драйверы, не поддерживающие 8-битных видеорежимов (скажем, драйверы 3Dfx), в этой программе не работают. Следовательно, функция SelectInitialDisplayMode() должна правильно реагировать на выбор такого драйвера.

Функция SelectInitialDisplayMode() вызывается после функции SelectDriver(), но перед созданием поверхностей. Функция выглядит так:

int BumperWin::SelectInitialDisplayMode() {

 DWORD curdepth=GetDisplayDepth();

 int i, nummodes=GetNumDisplayModes();

 DWORD w,h,d;

 if (curdepth!=desireddepth) ddraw2->SetDisplayMode(640, 480, curdepth, 0, 0);

 for (i=0;i<nummodes;i++) {

  GetDisplayModeDimensions(i, w, h, d);

  if (w==desiredwidth && h==desiredheight && d==desireddepth) return i;

 }

 ddraw2->RestoreDisplayMode();

 ddraw2->Release(), ddraw2=0;

 AfxMessageBox("Can't find 8-bit mode on this device");

 return -1;

}

Функция SelectInitialDisplayMode() ищет конкретный видеорежим 640x480x8. Если этот режим не найден, она выводит сообщение и возвращает –1, говоря тем самым классу DirectDrawWin о том, что приложение следует завершить. Если режим будет найден, функция возвращает его индекс. По этому индексу класс DirectDrawWin узнает о том, какой видеорежим следует активизировать.

Если функция SelectInitialDisplayMode() находит нужный видеорежим, класс DirectDrawWin вызывает функцию CreateCustomSurfaces(). Она создает поверхности наших восьми спрайтов, а также поверхность меню. Функция CreateCustomSurfaces() приведена в листинге 9.3.


Листинг 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 активизируются цветовые ключи.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

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

Книги похожие на "Графика для Windows средствами DirectDraw" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Стэн Трухильо

Стэн Трухильо - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

Отзывы читателей о книге "Графика для Windows средствами DirectDraw", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.