Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ответы на экзаменн-е вопросы за 1-й курс. Препод- Рудой И.Б / Ответы / 11 Програмирование графики и анимации в СррБилдер. Примеры

..doc
Скачиваний:
40
Добавлен:
25.05.2014
Размер:
33.28 Кб
Скачать

Вопрос №11 Програмирование графики и анимации в СррБилдер. Примеры.

В среде C++Builder существует три рода объектов, которые имеют отношение к графике:

1)Канва - предоставляет битовую карту поверхности окна приложения, компоненты, принтера и т.п., которая может быть использована для вывода графики. Канва не самостоятельный объект, она всегда является свойством какого-то другого графического объекта.

2)Графика - представляет растровое изображение некоторого файла или ресурса (битового образа, пиктограммы или метафайла).

C++Builder определяет производные от базового класса TGraphic объектные классы:

    • TBitmap,

    • Ticon,

    • TMetafile.

3)Рисунок (TPicture) представляет собой контейнер для графики, который может содержать любые классы графических объектов. Таким образом, контейнерный класс TPicture может содержать битовый образ, пиктограмму, метафайл или некоторый другой графический тип, определенный пользователем, а приложение может стандартно обращаться ко всем объектам контейнера посредством объекта TPicture.

Прстейший пример относится к рисованию линий, кроме того показано как можно задавать параметры пера:

void __fastcall

TForm1::Button1Click(TObject *Sender)

{

//Задаем цвет пера

Canvas->Pen->Color=(TColor)RGB(255,0,0);

//Задаем ширину пера

Canvas->Pen->Width=5;

//Можно переместить перо в исходную точку так

Canvas->MoveTo(100,200);

//Или тпереместить перо так

TPoint tPoint;

tPoint.x=100;

tPoint.y=200;

Canvas->PenPos=tPoint;

//И рисуем линию от исходной точки 100,200 до конкечной 0,50

Canvas->LineTo(0,50);

//Освобождать и восстанавливать ничего не надо

//однако канва запоминает установленные параметры

}

Анимация

Идея компьютерной анимации выглядит довольно просто: на неподвижном фоне (заднем плане) рисуется движущийся объект (в компьютерной анимации такие изображения называются спрайтами). Затем фон восстанавливается в том месте, где был нарисован спрайт, а спрайт рисуется в новом месте. Таким образом, у зрителя возникает ощущение движения спрайта.

Однако на практике все выглядит несколько сложнее. Прежде всего, спрайты, как и неподвижный фон, хранятся в битовых картах. Само изображение спрайта может иметь какие угодно очертания, но битовая карта, в которой хранится спрайт, представляет собой прямоугольник. Как отобразить прямоугольную карту спрайта, сохранив фон из неподвижного изображения вокруг изображения спрайта? Именно эту задачу мы и будем решать в данном разделе. Анимация, которую мы создаем, будет представлять собой воздушный шар, летящий на фоне облаков. Прежде всего, выберем изображение для неподвижного фона (рис. 13.1).

Силуэт шара на фоне облаков

void __fastcall TForm1::DrawScene(int X, int Y)

{

Image4->Canvas->CopyMode = cmSrcCopy;

Image4->Canvas->Draw(0, 0, Image1->Picture->Bitmap);

Image4->Canvas->CopyMode = cmSrcAnd;

Image4->Canvas->Draw(X, Y, Image2->Picture->Bitmap);

Image4->Canvas->CopyMode = cmSrcPaint;

Image4->Canvas->Draw(X, Y, Image3->Picture->Bitmap);

}void __fastcall TForm1::Timer1Timer(TObject *Sender)

Обработчик события OnTimer

{

DrawScene(XPos, YPos);

if((Image4->Height - YPos < Image2->Height) ||

(Image4->Width - XPos < Image2->Width))

Timer1->Enabled = false;

XPos += 4;

YPos += 4;

}

Запуск анимации

void __fastcall TForm1::Button1Click(TObject *Sender)

{

XPos = YPos = 0;

Timer1->Enabled = true;

}