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


Первый шаг - часть 7


{

free(MemBuf);

free(BackGroundBmp);

}

// функция рисует прокручиваемую битовую карту, не содержащую

// прозрачных пикселей; для скорости используется функция memcpyO;

// аргумент ScrollSplit задает столбец по которому битовая карта

// разбивается на две части

void OpaqueBlt(char *bmp,int StartY,int Height,int ScrollSplit)

{

char *dest;

int i;

dest=MemBuf+StartY*320; // вычисляем начальную позицию буфера

for(i=0;i<Height;i++)

{

// нарисовать левую половину битовой карты в правой половине буфера menicpy(dest+ScrollSplit,bmp,VIEW_WIDTH-ScrollSplit) ;

// нарисовать правую половину битовой карты в левой половине буфера memcpy(dest,bmp+VIEW_WIDTH-ScrollSplit,ScrollSplit);

bmp+=VIEW_WIDTH;

dest+=VIEW_WIDTH;

} } // конец функции

// Функция рисует смещающиеся слои

void DrawLayers()

{

OpaqueBlt(BackGroundBmp,0,100,background);

}

// Функция, обеспечивающая анимацию изображения.

// Наиболее критичная по времени выполнения.

// Для оптимизации как эту функцию, так и процедуры,

// которые она вызывает, рекомендуется переписать на ассемблере

// (В среднем это увеличивает производительность на 30%)

void AnimLoop()

{

while(KeyScan != ESC_PRESSED)    // цикл, пока не нажата ЕSС

{

switch(KeyScan)                 // обработать нажатую клавишу

{

case RIGHT_ARROW_PRESSED:      // нажата правая стрелка

background-=1;      // скроллировать фон на 2

// пикселя влево

if(background < 1)           // еще не конец образа?

background+=VIEW_WIDTH;    // ...тогда, можно смещать

// фон дальше

break;

case LEFT ARROW_PRESSED:       // нажата левая стрелка

background+=1;               // скроллировать фон на 2

// пикселя вправо

if(background > VIEW_WIDTH-1) // еще не конец образа

background-=VIEW_WIDTH;     // ...тогда можно смещать

// фон дальше

break;

default:                        // обработать все остальные

// клавиши break;

} DrawLayers();

memcpy(VideoRam,MemBuf,MEMBLK); // копировать MemBuf в

// VGA-память

frames++;

} }

// Функция осуществляет полную инициализацию




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



Книжный магазин