Трухильо Стэн
Шрифт:
В нем объявляются два обработчика сообщений. Функция OnKeyDown обрабатывает нажатия клавиш, а функция OnDestroy освобождает спрайты в конце работы программы.
Функции SelectDriver, SelectInitialDisplayMode, CreateCustomSurfaces, DrawScene и RestoreSurfaces наследуются от класса DirectDrawWin. Вскоре мы подробно рассмотрим каждую из этих функций. Функции SpritesCollide, SpritesCollideRect и SpritesCollidePixel совпадают с одноименными функциями, описанными выше, однако на этот раз они принадлежат классу BumperWin. Поскольку эти функции уже рассматривались, мы не будем обсуждать их снова.
В классе объявлены три переменные: массив указателей на объекты Sprite, целая переменная для хранения общего количества спрайтов и указатель text на интерфейс DirectDrawSurface. Первые две переменные предназначены для хранения спрайтов и последующих обращений к ним. Указатель text используется для отображения меню, находящегося в левом нижнем углу экрана.
При запуске программы Bumper прежде всего вызывается функция SelectDriver. Чтобы добиться максимальной гибкости, при наличии нескольких драйверов DirectDraw программа Bumper выводит меню. Функция SelectDriver выглядит так:
С помощью класса DriverDialog программа выводит меню со списком драйверов и использует драйвер, выбранный пользователем. Наши функции проверки столкновений предназначены только для 8-битных поверхностей, поэтому драйверы, не поддерживающие 8-битных видеорежимов (скажем, драйверы 3Dfx), в этой программе не работают. Следовательно, функция SelectInitialDisplayMode должна правильно реагировать на выбор такого драйвера.
Функция SelectInitialDisplayMode вызывается после функции SelectDriver, но перед созданием поверхностей. Функция выглядит так:
Функция SelectInitialDisplayMode ищет конкретный видеорежим 640x480x8. Если этот режим не найден, она выводит сообщение и возвращает –1, говоря тем самым классу DirectDrawWin о том, что приложение следует завершить. Если режим будет найден, функция возвращает его индекс. По этому индексу класс DirectDrawWin узнает о том, какой видеорежим следует активизировать.
Если функция SelectInitialDisplayMode находит нужный видеорежим, класс DirectDrawWin вызывает функцию CreateCustomSurfaces. Она создает поверхности наших восьми спрайтов, а также поверхность меню. Функция CreateCustomSurfaces приведена в листинге 9.3.
Листинг 9.3. Функция CreateCustomSurfaces