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


ИГРА WARLOCK (КОЛДУН) - часть 12


Жаль. Скорее всего, программа окажется более легкой для понимания! Листинг 19.2 содержит Сн-версию программы рисования фрагмента, а Листинг 19.3 содержит ее ассемблерную версию. Си-версия нуждается в добавлении механизма отсечения по границам игрового окна, но не беспокойтесь об этом. Только взгляните на внутренний цикл Си-версии и сравните его с ассемблерной версией.

Листинг 19.2. Си-версия программы для рисования фрагмента тек-стуры.

Render Sliver(sprite_ptr sprite,int scale, int column)

{

// Это обновленная версия функции рисования фрагмента текстуры.

// Она использует справочные таблицы с предварительно рассчитанными

// индексами масштабирования. В конце концов, я переписал ее

// на ассемблере из соображений скорости работы.

char far *work_sprite;

int far *row;

int work offset=0,offset,y,scale_off;

unsigned char data;

// Устанавливаем указатель на соответствующую строку

// справочной таблицы row = scale_table[scale];

if (scale>(WINDOW_HEIGHT-1))

{ scale_off = (scale-(WINDOW_HEIGHT-1))>>1;

scale=(WINDOW_HEIGHT-l);

sprite->y = 0;

}

// Устанавливаем указатель на спрайт для облегчения доступа

work_sprite = sprite->frames[sprite->curr_frame];

// Вычисляем смещение спрайта в видеобуфере

offset = (sprite->y << 8) + (sprite->y <<6) + sprite->x;

for(y=0;y<scale; y++)

{

double_buffer[offset] = work_sprite[work_offset+column];

offset  += SCREEN_WIDTH;

work_offset = row[y+scale_off];

} // Конец цикла for

) // Конец функции

Листинг 19.3. Ассемблерная версия программы рисования фрагмента текстуры (SLIVER.ASM).

; Эта функция является ассемблерной версией

; аналогичной функции на Си

; Она использует заранее вычисленные таблицы

; для увеличения скорости работы

;////////////////////////////

.MODEL MEDIUM, С             ; Используем модель MEDIUM

.CODE                       ; Начало сегмента кода

EXTRN double_buffer;DWORD   ; Буфер в оперативной памяти

EXTRN sliver_texture:DWORD  ; Указатель на текстуру




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



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