Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 5.15. Отображение символа.

Листинг 5.3. Создание новой цветовой палитры. | Листинг 5.4. Рисование точки в позиции (х,у). | Листинг 5.5. Программа быстрого рисования точки. | Листинг 5.6. Рисование горизонтальной линии. | Листинг 5.7. Рисование вертикальной линии. | Листинг 5.8. Создание и отображение цветовой палитры (PALDEMO.C). | Листинг 5.9. Структура заголовка PCX-файла. | Листинг 5.10. Программа чтения файла формата PCX. | Листинг 5.12. Функция извлечения спрайта из загруженного PCXфайла. | Листинг 5.13. Функция рисования спрайта. |


Читайте также:
  1. Выбор стиля символа.
  2. Листинг 11.2. Структура данных игрока.
  3. Листинг 11.3. Функции полета мухи.
  4. Листинг 11.4. Муравейник (ANTS.С).
  5. Листинг 11.5. Падение мяча (BALL.C).
  6. Листинг 11.6. Идеальный газ (GAS.C).
  7. Листинг 12.2. Шпионим за часами (SPY.C)._________________

void Blit_Char(int xc,inf ус,char c,int color)

{

// Функция использует описание символов 8х8 байт, хранящееся в ПЗУ

// для изображения символа на экране. Хитрость заключена в том, что

// в этом описании каждая экранная точка представлена одним битом.

int offset,x,у;

unsigned char data;

char far *work_char;

unsigned char bit_mask = 0х80;

// вычисляем начальное смещение символа в ROM

work_char= rom_char_set + с * CHAR_HEIGHT;

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

offset = (ус << 8) + (ус << 6) + хс;

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

{

// сбросить битовую маску

bit_mask = 0х80;

for (x=0; x<CHAR_WIDTH; x++)

{

// если бит равен 1, рисуем пиксель

if ((*work_char & bit_niask))

video_buffer[offset+x] = color;

bit_mask = (bit_mask>>l);

} // конец обработки строки

// переходим к следующей строке

offset += SCREEN_WIDTH;

work_char++;

} // конец рисования символа

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

 

Теперь и печать текстов не представляет труда. Нужно только выдерживать пространство между символами и печатать их из заданной строки один за другим, пока не встретится конец строки (NULL). В демонстрационной программе в конце этой главы мы используем подобную функцию.

Теперь давайте поговорим о методах анимации и рендеринга, которые применяются технике программирования игр.

Дублирующее буферизирование

Дублирующее буферизирование — это метод, позволяющий избежать мерцания, которое может возникать при перемещении объектов. Когда функции, которые мы пишем, рисуют спрайты па экране, то они это делают, не учитывая статус состояния VGA-карты, то есть в них отсутствует синхронизация с дисплеем. Существует два способа уменьшить возможное мигание.

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

Переключение страниц - это видоизмененное дублирующее буферизирование. При использовании этого метода две видеостраницы находятся во взаимосвязи. Когда одна из них воспроизводится на экране, другая перерисовывается. Новая страница затем воспроизводится переключением указателя на нее. Обратите внимание на рисунок 5.15 для осмысления этого метода.

Оба этих метода имеют общий недостаток - уменьшение быстродействия в два раза, но при этом отсутствует мигание и достигается очень высокое качество анимации. Мы обратимся к этому методу еще раз в седьмой главе, «Продвинутая битовая графика и специальные эффекты». Сейчас поговорим об уменьшении мерцания.

 

Вертикальный обратный ход луча

Образ, рисуемый на экране ЭЛТ (электронно-лучевой трубки) и управляемый картой VGA, образуется в результате взаимодействия следующих факторов:

§ Луч электронов движется, по экрану слева направо и сверху вниз, рисуя картинку;

§ Когда он достигает нижней границы, он вновь возвращается вверх и все начинается сначала.

Рисунок 5.16 показывает это.

 

§ Чтобы вернуться в исходную позицию, лучу требуется примерно 1/60 секунды. Это идеальное время для обновления видеобуфера. В течение этого периода видеобуфер недоступен VGA-карте. Таким образом, 1/60 секунды — это аппаратно-зависимый параметр.

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

Тайминг

Я попытался придумать хорошую демонстрацию перемещения спрайтов и решил, что для этого подойдет маленький городок с ковбоем, который ходит по улице. Не так уж плохо. Я хотел еще, чтобы он время от времени стрелял, но позже решил не усложнять дело. Для осуществления реалистичной анимации мы должны уделять большое внимание таймингу, то есть задержке между выводом кадров. Если образ имеет 10 анимационных кадров и мы будем их менять слишком быстро, то персонаж станет похож на лунатика. Поэтому мы должны иметь в программе счетчики времени, чтобы наши персонажи выполняли определенные действия с заданной скоростью. В нашем случае мы используем четыре переменные для сохранения счетчиков движения и анимации:

§ anim_clock

§ anim_speed

§ motion_clock

§ motion_speed

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

Игра Tombstone

Мы начали с того, что вообще ничего не знали о VGA-карте. Сейчас мы знаем очень много. Поэтому я думаю, что было бы лучше, если бы вы написали маленькую двухмерную игру для закрепления пройденного материала. Чтобы вам в этом помочь, я написал демонстрацию и назвал ее Tombstone.

В этой демонстрации маленький ковбой ходит по городу с различной скоростью. У вас есть все инструменты, чтобы «дать» ему пистолет и "научить" стрелять. В PCX-файле на дискете вы найдете для этого все необходимые картинки. Вся программа за исключением функции Set_Mode() дана в Листин­ге 5.16. Прилинкуйте Set_Mode(), когда будете создавать исполняемый файл.


Дата добавления: 2015-07-12; просмотров: 126 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 5.14. Сохранение фона под спрайтом.| Листинг 5.16. Tombstone (TOMB.С).

mybiblioteka.su - 2015-2024 год. (0.009 сек.)