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



         

Инициализация приложения - часть 2


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

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




Содержание  Назад  Вперед