русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 1337; Нарушение авторских прав


Текст в графическом окне

 

В графическое окно можно выводить и текст. Команда TextOut(x,y,s) выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s). Если нужно вывести число, его предварительно превращают в строку с помощью str, inttostr или floattostr.

 

Перед выводом текста нужно настроить шрифт:

 

1.SetFontColor(color); - устанавливает цвет шрифта.

2.SetFontSize(sz); - устанавливает размер шрифта в пунктах

3.SetFontName(name); - устанавливает наименование шрифта. По умолчанию установлен шрифт, имеющий наименование MS Sans Serif. Наиболее распространенные шрифты – это Times, Arial и Courier New (наименование шрифта можно набирать без учета регистра).

4.SetFontStyle(fs); - устанавливает стиль шрифта. Стилишрифта задаются следующими именованными константами: fsNormal – обычный; fsBold – жирный; fsItalic – наклонный; fsBoldItalic – жирный наклонный; fsUnderline – подчеркнутый; fsBoldUnderline – жирный подчеркнутый; fsItalicUnderline – наклонный подчеркнутый; fsBoldItalicUnderline – жирный наклонный подчеркнутый.

5.Функции TextWidth(s); и TextHeight(s); возвращают ширину и высоту строки s в пикселях при текущих настройках шрифта. Это может понадобиться, например, чтобы подогнать размеры текста к рисунку (или наоборот).

 

 

При разработке профессиональных (особенно игровых) программ более реалистичная графика получается, если не программировать рисунки графическими примитивами, а подгружать из файлов готовые, созданные в графических редакторах в формате «.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;. Та же программа (катящийся шар) с применением второй технологии получается короче и работает немного быстрее:

 


 



<== предыдущая лекция | следующая лекция ==>
Графические примитивы | Вспомогательные алгоритмы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.