Читайте также:
|
|
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. Функция рисования спрайта. |