Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Листинг 17.1. Файл заголовка демонстрационной программы циклического скроллинга (PARAL.H)// //Paral.h - данный заголовок определяет константы и структуры //данных, используемые в демонстрационной программе // параллакса #define KEYBOARD 0х09 // //Коды клавиатуры для прерывания INT 9h #define RIGHT_ARROW_PRESSED 77 #define RIGHT_arrow_rel 205 #define LEFT_ARROW_PRESSED 75 #define LEFT_ARROW_REL 203 #define ESC_PRESSED 129 #define UP_ARROW_PRESSED 72 #define UP_ARROW_REL 200 #define DOWN_ARROW_PRESSED 80 #define down_arrow_rel 208 #define VIEW_WIDTH 320 #define VIEW_HEIGHT 150 #define MEMBLK VIEW_WIDTH*VIEW HEIGHT #define TRANSPARENT 0 // цветовые коды #define TOTAL_SCROLL 320 enum (NORMAL, RLE},; enum (FALSE,TRUE}; typedef struct { char manufacturer; /* Всегда 0 */ char version; /* Всегда 5 для 256-цветных файлов */ char encoding; /* Всегда 1 */ char bits_per_pixel; /* Должно быть равно 8 для 256-цветных файлов */ int xmin, ymin; /* Координаты левого верхнего угла */ int xmax,ymax; /* Высота и ширина образа */ int hres; /* Горизонтальное разрешение образа */ int vres; /* Вертикальное разрешение образа */ char palettel6[48]; /* палитра EGA; не используется для 256-цветных файлов */ char reserved; /* зарезервировано */ char color planes; /* цветовые планы */ int bytes_per_line; /* количество байт в каждой строке пикселей */ int palette_type; /* Должно быть равно 2 для цветовой палитры */ char filler[58]; /* Не используется */ } PcxHeader; typedef struct { PcxHeader hdr; char *bitmap; char pal[768]; unsigned imagebytes,width,height; } PcxFile; #define PCX_MAX_SIZE 64000L enum {PCX_OK,PCX_NOMEM,PCX_TOOBIG,PCX_NOFILE}; #ifdef __cplusplus extern "C" { #endif int ReadPcxFile(char *filename,PcxFile *pcx); void _interrupt NewInt9(void); void RestoreKeyboard(void); void InitKeyboard(void); void SetAllRgbPalette(char *pal); void InitVideo (void); void RestoreVideo(void); int InitBitmaps(void); void FreeMem(void); void DrawLayers(void); void AnimLoop(void); void Initialize(void); void CleanUp (void); void OpaqueBIt (char*, int, int, int); void TransparentBit(char *,int,int,int); #ifdef __cplusplus } #endif Программа из Листинга 17.2 (PARAL.C) демонстрирует повторяемое смещающееся изображение. Движущаяся картинка показывает облачное небо под солнцем. Хотя изображение и выглядит непрерывно меняющимся, но на самом деле оно неподвижно. Наиболее важной частью программы является функция OpaqueBIt(). Она выводит левую и правую части изображения в буфер системной памяти, основываясь на значении LeftHalf. Когда построение закончено, содержимое буфера копируется на экран. Запустив оттранслированную программу, используйте курсорные клавиши «влево» и «вправо» для изменения направления скроллинга. Для выхода из программы нажмите Esc. При этом она вычислит и покажет скорость анимации кадра. На машине с процессором 386SX/25 скорость выполнения составила около 35 кадров в секунду при размерах демонстрационного окна 320х100 Пикселей.
|