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


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


В Warlock я написал около 100 ассемблерных строк для оптимизации только наиболее критичных по времени выполнения кусков игры. Они, конечно, относились к визуализации графики. Существует определенная норма среди программистов игр для ПК: в основном игра пишется на Си, а затем некоторые функции, практически только относящиеся к графике, переписываются па ассемблере. (Если вы вдруг обнаружили, что, применяя ассемблер для реализации искусственного интеллекта или игровой логики, с вашей программой происходит что-то неладное, стоит хорошенько подумать, не вернуться ли к Си.) Я почти уверен, что лучшие мировые программисты могли бы сделать вашу и мою программы на Си значительно быстрее и без использования ассемблера. Запомните это, и когда найдете ассемблер пригодным не только для функций, связанных с графикой и низкоуровневым программированием, признайте, что надо сделать шаг назад (и шаг вперед... словно мы танцуем ча-ча-ча!) и начать сначала. Так или иначе, на ассемблере я переписал только две функции, которые перемещают содержимое дублирующего буфера в видеопамять и рисуют небо и землю (Листинг 19.5). Если уж на то пошло, их ассемблерный вариант занимает всего 5-10 строк.

Листинг 19.4. Функция, переносящая содержимое дублирующего бу-фера в видеопамять (DRAWG.ASM).

; Функция просто копирует дублирующий буфер в видеопамять

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

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

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

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

; и соглашения языка Си

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

EXTRN double_buffer:DWORD     ; указатель на дублирующий буфер

PUBLIC Draw_Ground_32         ; делаем функцию общедоступной

Draw_Ground_32 PROC FAR С     ; функция поддерживает-соглашения

; по вызову для языка Си и является ; дальней

.386            ; использовать инструкции процессора 80386

push di                       ; сохраняем регистр DI

cld                           ; сбрасываем флаг направления




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



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