- •Оглавление Оглавление
- •Теоретические основы Визуального программирования.
- •Лабораторная работа №1 Знакомство со средой Dеlphi.
- •Лабораторная работа №2. Объекты: Кнопка. Label
- •Лабораторная работа № 3. Свойства Объектов.
- •Лабораторная работа № 4. Программирование линейной структуры
- •Лабораторная работа №5. Оператор ветвление в дельфи..
- •Лабораторная работа №6. Оператор ветвление в дельфи.
- •Лабораторная работа № 7 Программа "Квадратное уравнение"
- •Лабораторная работа № 8 «Программы с циклами в Delphi»
- •Лабораторная работа № 9 «Программа "Вклад"»
- •Лабораторная работа № 10 «Целочисленный Калькулятор».
- •Лабораторная работа № 11 «Графика в Дельфи».
- •Вывод текста
- •Лабораторная работа № 1? «Графика в цикле».
- •Лабораторная работа № 1? «Графика в цикле». ?????????
- •Лаб работа . Дополнительный материал по теме графика.
- •Лабораторная работа №12. Обработка событий в графике.
- •Лабораторная работа № 13 «Графика в Дельфи».
- •Лабораторная работа № 14 «Графика в Дельфи». Продолжение
- •Лабораторная работа № Светофор
- •Лабораторная работа № Летающий шарик.
- •Лабораторная работа Вывод графиков функций в Delphi
- •Лабораторная работа Построение графиков в среде Delphi.
- •Лабораторная работа № Метод базовой точки. Кораблик
- •Лабораторная работа № Метод базовой точки. Машина
- •Лабораторная работа Битовые образы
- •Самостоятельные программы
- •1. События и обработка событий
- •14. Работа с графикой в окне формы
Лабораторная работа № Метод базовой точки. Машина
Сегодня мы рассмотрим, как средствами дельфи создать простейшую мультипликацию.
При программировании сложных изображений, состоящих из множества элементов, используется метод, который называется методом базовой точки. Суть этого метода заключается в следующем:
1. Выбирается некоторая точка изображения, которая принимается за базовую.
2. Координаты остальных точек отсчитываются от базовой точки, в относительных координатах.
3. Если координаты точек изображения отсчитывать от базовой в относительных единицах, а не в пикселах, то обеспечивается возможность масштабирования изображения.
Рис 1. |
Следующая программа демонстрирует перемещение грузовика по поверхности формы от ее левой границы к правой. Изображение грузовика формируется методом базовой точки. После исчезновения грузовика за правой границей формы он вновь появляется слева. На форме предусмотрена кнопка, останавливающая и вновь продолжающая движение грузовика (Стоп/ Пуск). Вид формы должен соответствовать изображенному на рисунке 1.10.
|
Рис. 11 |
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.
