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

Листинг 5.12. Функция извлечения спрайта из загруженного PCXфайла.

Листинг 4.9. Определение и умножение двух матриц. | Листинг 4.11. Супер Астероиды (FIELD.C). | СЕКРЕТЫ VGA-КАРТ | Листинг 5.3. Создание новой цветовой палитры. | Листинг 5.4. Рисование точки в позиции (х,у). | Листинг 5.5. Программа быстрого рисования точки. | Листинг 5.6. Рисование горизонтальной линии. | Листинг 5.7. Рисование вертикальной линии. | Листинг 5.8. Создание и отображение цветовой палитры (PALDEMO.C). | Листинг 5.9. Структура заголовка PCX-файла. |


Читайте также:
  1. IV. Перепишите и переведите предложения, обращая внимание на употребление герундия в разных функциях.
  2. IV. Перепишите и переведите предложения, обращая внимание на употребление герундия в разных функциях.
  3. X. Прочитайте и переведите предложения, обращая внимание на употребление инфинитива в различных функциях.
  4. XIV. Прочитайте и переведите предложения, обращая внимание на употребление Participle I в разных функциях.
  5. XV. Прочитайте и переведите предложения, обращая внимание на употребление Participle II в разных функциях.
  6. Алгоритм 8.1. Масштабирование спрайта.
  7. Аспекты извлечения знаний.

void PCX_Grap_Bitmap(pcx_picture_ptr image, sprite_ptr sprite, int sprite_franie, int grab_x, int grab_y)

{

// функция выделяет одно изображение из буфера в который

// загружен PCX-файл

// функция исходит из предположения, что в действительности массив

// пикселей размером 320х200 разделен на отдельные изображения

// размером 24х24 пикселя

int x_off,y_off, х,у, index;

char far *sprite_data;

// вначале выделяем память для хранения спрайта в структуре спрайта

sprite->frames[sprite_frame] = (char far *)malloc(SPRITE_WIDTH * SPRITE_HEIGHT);

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

// для ускорения доступа

sprite_data = sprite->frames[sprite_frame];

// теперь перемещаем битовый образ спрайта из области PCX-файла

// в выделенную память

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

// помните, что в действительности файл представляет собой массив.

// 12х8 элементов, каждый из которых имеет размер 24х24 пикселя.

// Индекс (0,0) соответствует верхнему левому углу спрайта,

// (11,7) - нижнему правому

х_off = 25 * grab_x + 1;

у_off = 25 * grab_y + 1;

// вычисляем начальный адрес

y_off =y_off * 320;

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

{

for (x=0; x<SPRITE_WIDTH; X++)

{

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

//в следующую позицию буфера спрайта

sprite_data[у*24 + х] = image->buffer[y_off + x_off + х];

} // конец копирования строки

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

y_off+=320;

} // конец копирования

// инкрементировать счетчик кадров

sprite->num_frames++;

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

Эта функция по указателю на спрайт определяет его расположение в загруженном файле. Далее она выделяет память для хранения образа и инициализирует структуру данных (я решил делать спрайты размером 24 на 24 пикселя, но вам ничто не мешает изготавливать любые другие спрайты). Теперь, когда у нас подготовлены образы, следующим шагом будет их отображение на экране монитора. Для этого нам надо:

§ Вычислить начальную позицию спрайта согласно его координатам (х,у);

§ Преобразовать полученные координаты в адрес видеобуфера;

§ Переместить байты изображения в видеобуфер.

Для рисования спрайта мы должны выполнить все операции с текущим кадром анимации. Код в Листинге 5.13 делает все перечисленное.


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


<== предыдущая страница | следующая страница ==>
Листинг 5.10. Программа чтения файла формата PCX.| Листинг 5.13. Функция рисования спрайта.

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