Использование готовых точечных рисунков

 

При разработке профессиональных (особенно игровых) программ более реалистичная графика получается, если не программировать рисунки графическими примитивами, а подгружать из файлов готовые, созданные в графических редакторах в формате «.bmp», «.jpg» или «.gif».

1. Для загрузки изображения из файла используется функция LoadPicture(’имя файла’); Она возвращает адрес в памяти, куда загружается этот рисунок. Для хранения этого адреса используется переменная-описатель целого типа. Например:

 

dom:= LoadPicture(’domik.bmp’);

 

2. Функции PictureWidth(n) и PictureHeight(n) возвращают ширину и высоту рисунка с описателем n.

3. Функция CreatePicture (w,h)создаёт в памяти пустой рисунок размеров w,h и возвращает его адрес в описатель. Чтобы при создании рисунка сразу скопировать в него часть графического окна, нужно создавать его командой CreatePictureFromRect(RectF(x1,y1,x2,y2)), в которой заданы координаты двух диагонально противоположных углов прямоугольного участка окна. (Для использования Rectf нужно подключить библиотеку PointRect)

 

 

4. Команда DestroyPicture(n); удаляет рисунок с описателем n из оперативной памяти, описатель рисунка при этом становится недействительным.

5. Изменить размеры рисунка можно командой SetPictureSize(n,w,h).

6. Прямоугольный участок из одного рисунка в другой можно скопировать командой
CopyRect(kuda,RectF(x1,y1,x2,y2), otkuda,RectF(x3,y3,x4,y4)); . Если при этом конечные размеры не совпадают с исходными, то происходит масштабирование рисунка.

7. Вывести рисунок из переменной в графическое окно можно командой DrawPicture несколькими способами:

а) DrawPicture(n,x,y); - выводит рисунок с описателем n в позицию (x,y) графического окна.

б) DrawPicture(n,x,y,w,h); - выводит рисунок с описателем n в позицию (x,y), масштабируя его размеры к ширине w и высоте h. Если w<0, то рисунок зеркально отражается относительно вертикальной прямой, проходящей через x, если же h<0, то рисунок зеркально отражается относительно горизонтальной прямой, проходящей через y.

в) DrawPicture(n,x,y, RectF(x1,y1,x2,y2)); - выводит часть рисунка с описателем n, заключенную в прямоугольнике (x1,y1,x2,y2), в позицию (x,y) графического окна.

г) DrawPicture(n,x,y,w,h, RectF(x1,y1,x2,y2)); - выводит часть рисунка, масштабируя его размеры.

8. Команда SetPictureTransparent(n,b); устанавливает (b=True) или отключает (b=False) режим прозрачности при рисовании рисунка с описателем n. Если b=True и рисунок имеет белый фон, то при его рисовании фон не отображается.

9. КомандаSavePicture(n,fname); сохраняет рисунок с описателем n в файл с именем fname. Рисунки можно сохранять в формате .bmp, .jpg или .gif .

10. Команды FlipPictureHorizontal(n); и FlipPictureVertical(n); позволяют зеркально отображать рисунок с описателем n горизонтально и вертикально.

11. Очень полезная функция ImageIntersect(n1,n2) типа boolean определяет, пересекаются ли изображения на рисунках с описателями n1 и n2. Рисунки должны иметь одинаковый размер. Белый цвет на рисунке считается прозрачным. Изображения на рисунках считаются пересекающимися, если имеется хотя бы один пиксел, который не прозрачен и имеет одни и те же координаты для обоих рисунков.

 

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

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

Команда SetDrawingSurface(buf); устанавливает рисунок с описателем buf в качестве поверхности рисования. С этого момента все команды рисования работают не в графическом окне, а в данном рисунке.

Команда RestoreDrawingSurface; восстанавливает в качестве поверхности рисования графическое окно.

Рассмотрим эту технологию на примере:

Создать анимацию: снежный шар катится по заснеженной поверхности земли. Уровень поверхности отслеживать по чёрной линии. За пределами окна (x<0 или x>=600) оставить y как в предыдущих точках.

Сначала создадим рисунки и поместим их в тот же каталог, куда сохраним нашу программу:

 

 

Двигаться вправо будем в цикле по x. Значение y в данной точке будем определять так: в цикле просмотрим полоску с данным x сверху донизу. Как только встретим белую точку, остановим поиск – это и есть поверхность.

 

2. Второй способ создания анимации заключается в следующем: на время подготовки кадра отключают режим прорисовки окна командой LockDrawing; . Пока действует эта команда, всё рисование происходит в невидимой копии окна. Когда кадр подготовлен, его можно проявить в окне командой Redraw;. Чтобы отменить данный режим и всё рисование вновь происходило прямо в графическом окне, используется команда UnLockDrawing;. Та же программа (катящийся шар) с применением второй технологии получается короче и работает немного быстрее:

 


 








Дата добавления: 2014-12-18; просмотров: 656;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.