Урок 53 Графика: Учимся рисовать
Сейчас мы продолжим свои неуверенные шаги в мире двухмерной графики. Вы уже, наверное, утомились от моей теории и хотите уже что-нибудь порисовать…
Итак, начнём:
Для начала нарисуем Флаг РФ
В событии формы OnPaint пишем:
Canvas->Pen->Color = clWhite;
Canvas->Brush->Color = clWhite;
Canvas->Rectangle(10, 10, 90, 30);
Canvas->Pen->Color = clBlue;
Canvas->Brush->Color = clBlue;
Canvas->Rectangle(10, 30, 90, 50);
Canvas->Pen->Color = clRed;
Canvas->Brush->Color = clRed;
Canvas->Rectangle(10, 50, 90, 70);
Щас опробуем метод Polygon():
Создадим массив вершин, пропишем их координаты x и y
Всё это пишем в том-же OnPaint()
TPoint p[4];
p[0].x = 50; p[0].y = 100;
p[1].x = 150; p[1].y = 75;
p[2].x = 250; p[2].y = 100;
p[3].x = 150; p[3].y = 125;
Рисуем ромб:
Canvas->Pen->Color = clRed;
Canvas->Brush->Color = clRed;
Canvas->Polygon(p, 3);
Простая анимация:
Анимацией или мультипликацией называется движущийся или меняющийся рисунок.
Обеспечить перемещение рисунка довольно просто: надо сначала вывести рисунок, затем, через некоторое время стереть его и снова вывести уже на некотором расстоянии от первоначального положения. Подбором времени между выводом и удалением рисунка можно добиться иллюзии движения его по экрану.
Давайте сделаем простейшую анимацию движущегося шарика:
Для начала, кинем на форму Button, саму форму покрасьте в белый цвет (поставьте свойству Color значение clWhite), затем создадим процедуру вычерчивания круга (см листинг), далее в событии OnPaint пишем krug(58, 8, clMaroon) , чтобы при запуске программы он уже был. Далее логика вещей должна быть вам понятна, т.к листинг прост и информативен.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Graph2Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
void krug(int x1, int x2, int color)
{
Form1->Canvas->Pen->Color = StringToColor(color); //функция чертит круг
Form1->Canvas->Brush->Color = StringToColor(color);
Form1->Canvas->Ellipse(x1, 100, x2, 50);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
krug(58, 8, clMaroon); //показываем круг
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int x1 = 58;
int x2 = 8;
do
{
krug(x1, x2, clMaroon); //Рисуем круг
Sleep(7); //задержка на 7 мс
krug(x1, x2, clWhite); //стираем круг
x1++;
x2++;
}
while(x1 < 465);
krug(58, 8, clMaroon); //ставим круг в начальное положение
}
//----------------------------------------------------------------------------
Ну что, аниматор, как зрелище….