Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по Дельфи_2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
7.3 Mб
Скачать

Лабораторная работа № Метод базовой точки. Машина

Сегодня мы рассмотрим, как средствами дельфи создать простейшую мультипликацию.

При программировании сложных изображений, состоящих из множества элементов, используется метод, который называется методом базовой точки. Суть этого метода заключается в следующем:

1. Выбирается некоторая точка изображения, которая принимается за базовую.

2. Координаты остальных точек отсчитываются от базовой точки, в относительных координатах.

3. Если координаты точек изображения отсчитывать от базовой в относительных единицах, а не в пикселах, то обеспечивается возможность масштабирования изображения.

Рис 1.

При использовании метода базовой точки легко обеспечить перемещение сформированного изображения: надо сначала вывести изображение в исходной базовой точке, через небольшой промежуток времени стереть изображение и снова его вывести, но уже изменив координаты базовой точки.

Следующая программа демонстрирует перемещение грузовика по поверхности формы от ее левой границы к правой. Изображение грузовика формируется методом базовой точки. После исчезновения грузовика за правой границей формы он вновь появляется слева. На форме предусмотрена кнопка, останавливающая и вновь продолжающая движение грузовика (Стоп/ Пуск). Вид формы должен соответствовать изображенному на рисунке 1.10.

Рис. 11

Отрисовку грузовика выполняет процедура lorry(), которая получает в качестве входных параметров координаты базовой точки. Для того чтобы стереть изображение грузовика используется метод Rectangle(), который рисует закрашенный цветом формы прямоугольник, полностью покрывающий грузовик. В программе объявлены константы dx и dy, изменяя значения которых можно подобрать необходимый масштаб грузовика.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, ExtCtrls, StdCtrls;

type

TForm1 = class(TForm)

Timer1: TTimer;

Button1: TButton;

procedure Timer1Timer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

const

dx=5;

dy=5;

var

x, y: integer; //координаты базовой точки грузовика

//процедура вычерчивает грузовик

procedure lorry(x, y: integer);

var

p: array[1..6] of TPoint; //координаты точек кабины

begin

with Form1.Canvas do

begin

Pen.Width:=2;

Pen.Color:=clBlack;

//кузов грузовика

Brush.Color:=clTeal;

Rectangle(x, y-10*dy, x+20*dx, y);

//кабина грузовика

p[1].X:=x+22*dx; p[1].Y:=y;

p[2].X:=x+22*dx; p[2].Y:=y-20*dy;

p[3].X:=x+27*dx; p[3].Y:=y-20*dy;

p[4].X:=x+32*dx; p[4].Y:=y-12*dy;

p[5].X:=x+35*dx; p[5].Y:=y-12*dy;

p[6].X:=x+35*dx; p[6].Y:=y;

Polygon(p);

//окно кабины

MoveTo(x+27*dx, y-20*dy);

LineTo(x+27*dx, y-12*dy);

LineTo(x+32*dx, y-12*dy);

Brush.Color:=clWhite;

FloodFill(x+28*dx, y-13*dy, clBlack, fsBorder);

//колеса грузовика

Brush.Color:=clGray;

Ellipse(x+3*dx, y, x+12*dx, y+9*dy);

Ellipse(x+23*dx, y, x+32*dx, y+9*dy);

//рама грузовика

Brush.Color:=$002B7399;

Rectangle(x, y, x+35*dx, y+dy);

end;

end;

//Обработка сигнала таймера

procedure TForm1.Timer1Timer(Sender: TObject);

begin

//стереть изображение грузовика

with Form1.Canvas do

begin

Pen.Color:=Color;

Brush.Color:=Color;

Rectangle(x, y-20*dy, x+35*dx, y+9*dy)

end;

//определить новую точку появления грузовика

if x then x:=x+5

else x:=-35*dx;

lorry(x, y); //нарисовать грузовик

end;

//Обработка события Create для формы

procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.Width:=500; //ширина формы

Form1.Height:=250; //высота формы

Timer1.Interval:=100; //интервал времени работы таймера

Timer1.Enabled:=false; //таймер выключен

Button1.Caption:='Пуск'; //надпись на кнопке

x:=-35*dx; //начальная координата х грузовика

y:=150; //начальная координата y грузовика

end;

//Обработка события нажатия на кнопку

procedure TForm1.Button1Click(Sender: TObject);

begin

if Timer1.Enabled then

begin

Timer1.Enabled:=false;

Button1.Caption:='Пуск'

end

else

begin

Timer1.Enabled:=true;

Button1.Caption:='Стоп'

end

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]