Программирование игр для Windows. Советы профессионала


Спрайты - часть 2


Делать это нужно осторожно, поскольку запись пикселей в видеобуфер разрушает то, что было на их месте. Поэтому, мы должны уметь сохранять ту часть изображения, которая окажется закрыта спрайтом, чтобы в дальнейшем иметь возможность восстано­вить первоначальный вид экрана.

Давайте на этом Месте остановимся и поговорим чуть-чуть об анимации. В играх для ПК применяется два способа обновления экрана:

§          Мы можем перерисовывать весь экран целиком, как это сделано; в игре Wolfenstein 3D;                                         

§          Можно перерисовывать лишь участки экрана.

Какой из способов лучше выбрать, зависит от типа игры. Если мы перери­совываем весь экран, то это нужно делать по возможности быстро, поскольку 64000 пикселей - все же довольно много. Если мы перерисовываем только участки экрана, то желательно быть уверенным, что фон после прохождения спрайта не изменится. Поскольку все игры для ПК отличаются друг от друга, то для решения конкретных специфических задач всегда надо выбирать наиболее подходящую технику.

Давайте рассмотрим способ, которым мы будем пользоваться в настоящей главе - это перерисовка участков экрана. Посмотрите на рисунок 5.11, чтобы представить последовательность событий, позволяющих спрайту правильно перемещаться по экрану.

Теперь, когда мы знаем что делать, надо попробовать это реализовать. Для начала создадим структуру данных спрайта. Листинг 5.11 содержит необходимый для этого код.

Листинг 5.11. Структура спрайта с полями для анимации.

typedef struct sprite_typ

{

int x,y;            // текущая позиция спрайта

int x_old, y_old;    // предыдущая позиция спрайта

int width,height;   // размеры спрайта

int anim_clock;     // время анимации

int anim_speed;     // скорость анимации

int motion_speed;   // скорость движения

int motion_clock;   // время

движения

char far *frames [MAX_SPRITE_FRAMES] ; // массив

указателей




Начало  Назад  Вперед