1 Используемые компоненты:
TImage
TTimer
Создаем Анимацию на Delphi,по дороге будут ездить на встречу друг другу автомобиль и мотоцикл.
1) И так находим изображение дороги или рисуем в программе Paint сами. Задаем размер картинки в пикселях 640*480. Для этого можем использовать программу Фотошоп или тот же Paint. Задаем имя картинке fon.bmp
2) Находим изображение или рисуем в программе Paint небольшой автомобиль установив размер картинки 110*140 пикселей задаем имя картинке avto.bmp
3) Аналогично находим изображение или рисуем в программе Paint небольшой мотоцикл установив размер картинки 110*140 пикселей задаем имя картинке moto.bmp
Запускаем Delphi и создаем новое приложение: File->New->VCL Forms Application – Delphi.
Кидаем на форму три компонента TImage из вкладки Additional и компонент TTimer из вкладки System.
В компонент Image1 в свойство Picture загружаем подготовленный нами файл fon.bmp, свойство Align устанавливаем alClient.
А форму растянем до размеров фона.
В компонент Image2 в свойство Picture загружаем подготовленный нами файл avto.bmp и перемещаем его на дорогу.
В компонент Image3 в свойство Picture загружаем подготовленный нами файл moto.bmp и перемещаем его на дорогу.
Переходим к написанию кода:
Перед разделом type добавим раздел const и объявим две константы
const
scr_width = 640; // ширина формы
scr_height = 480; // высота формы
В разделе var объявим переменные x,y,x1,y1 типа integer.
var
Form1: TForm1;
x,y,x1,y1:integer;
Далее дважды щелкаем на компоненте таймер и пишем следующий код процедуры:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x+2;//текущая координата + шаг для автомобиля
x1:=x1-2;//текущая координата + шаг для мотоцикла
if x>scr_width+image2.Width then x:=-image2.Width;// ограничение справа
if x1<-image3.Width then x1:=scr_width;// ограничение слева
//рисуем
image2.Left:=x;
image3.Left:=x1;
end;
В свойствах таймера свойство интервал устанавливаем в пределах от 1 до 100, в зависимости от того какую скорость анимации я хочу получить.
2 Полный код программы.
unit anim;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
const
scr_width = 640; // ширина формы
scr_height = 480; // высота формы
type
TForm1 = class(TForm)
Timer1: TTimer;
Image1: TImage;
Image2: TImage;
Image3: TImage;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x,y,x1,y1:integer;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x+2;//текущая координата + шаг для автомобиля
x1:=x1-2;//текущая координата + шаг для мотоцикла
if x>scr_width+image2.Width then x:=-image2.Width;// ограничение справа
if x1<-image3.Width then x1:=scr_width;// ограничение слева
//рисуем
image2.Left:=x;
image3.Left:=x1;
end;
end.
Для того чтобы вывести на экран изображения нужно:
2.1 Активировать созданные переменные
//создаем объекты
fon:=TBitmap.Create; // фон
moto:=TBitmap.Create;// мотоцикл
avto:=TBitmap.Create; // машина
scr_buffer:=TBitmap.Create; // буфер обмена
scr_buffer.Width:=scr_width; // ширина буфера
scr_buffer.Height:=scr_height; // высота буфера
2.2 Загрузить изображения в эти переменные
// загружаем объекты
moto.LoadFromFile('moto.bmp'); // мотоцикл
avto.LoadFromFile('avto.bmp'); // машина
fon.LoadFromFile('fon.bmp');// фон
x:=0; //начальные координаты машины
y:=430;
x1:=500;// начальные координаты мотоцикла
y1:=380;
2.3 Установить прозрачный фон вокруг машины и мотоцикла
avto.transparent:=true;//задаем прозрачность
moto.transparent:=true;
2.4 И наконец вывести эти изображения на графический холст Image
//ление координат
x:=x+2;//текущая координата + шаг для автомобиля
x1:=x1-2;//текущая координата + шаг для мотоцикла
if x>scr_width+avto.Width then x:=-avto.Width;// ограничение справа
if x1<-moto.Width then x1:=scr_width;// ограничение слева
//рисуем
scr_buffer.Canvas.Draw(0,0,fon);//возобновление фона
scr_buffer.Canvas.Draw(x1,y1,moto);//движение мотоцикла
scr_buffer.Canvas.Draw(x,y,avto);//движение машины
form1.Canvas.Draw(0,0,scr_buffer); //копируем содержимое буфера на экран
При этом первая цифра в скобках, это координата x, а вторая цифра соответственно координата y
5) Для того, чтобы изображения стали двигаться, необходимо динамически менять координаты изображений на холсте, желательно стирая старое изображение.
Эту задачу выполняет компонент Timer
3 Полный код программы:
unit anim;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
const
scr_width = 640; // ширина экрана
scr_height = 480; // высота экрана
type
TForm1 = class(TForm)
Timer1: TTimer;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
fon:TBitmap;
moto:TBitmap;
scr_buffer:TBitmap;
avto:TBitmap;
x,y,x1,y1:integer;
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
scr_buffer.Free;
fon.Free;
moto.Free;
avto.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//создаем объекты
fon:=TBitmap.Create; // фон
moto:=TBitmap.Create;// мотоцикл
avto:=TBitmap.Create; // машина
scr_buffer:=TBitmap.Create; // буфер обмена
scr_buffer.Width:=scr_width; // ширина буфера
scr_buffer.Height:=scr_height; // высота буфера
// загружаем объекты
moto.LoadFromFile('moto.bmp'); // мотоцикл
avto.LoadFromFile('avto.bmp'); // машина
fon.LoadFromFile('fon.bmp');// фон
x:=0; //начальные координаты машины
y:=430;
x1:=500;// начальные координаты мотоцикла
y1:=380;
avto.transparent:=true;//задаем прозрачность
moto.transparent:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x+2;//текущая координата + шаг для автомобиля
x1:=x1-2;//текущая координата + шаг для мотоцикла
if x>scr_width+avto.Width then x:=-avto.Width;// ограничение справа
if x1<-moto.Width then x1:=scr_width;// ограничение слева
//рисуем
scr_buffer.Canvas.Draw(0,0,fon);//возобновление фона
scr_buffer.Canvas.Draw(x1,y1,moto);//движение мотоцикла
scr_buffer.Canvas.Draw(x,y,avto);//движение машины
form1.Canvas.Draw(0,0,scr_buffer); //копируем содеримое буфера на экран
end;
end.
|
|
|
Заключение
Цель моей работы – Создать программу анимация: перемещение объектов по форме в программе Delphi.
Delphi — императивный, структурированный, объектно-ориентированный язык программирования. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi (производный от Object Pascal) начал жить своей самостоятельной жизнью и претерпевал различные изменения, связанные с современными тенденциями (например, с развитием платформы.NET) развития языков программирования: появились classhelpers, перегрузки операторов и другое..
Список литературы
1. Хавьер Пашеку. Программирование в Borland Delphi 2009 для профессионалов = Delphi for.NET Developer’s Guide. — М.: Вильямс, 2010. — 944 с. — ISBN 0-672-32443-X
2. А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько. Программирование на языке Delphi. Учебное пособие. — 2010.
3. Нил Дж. Рубенкинг. Язык программирования Delphi для «чайников». Введение в Borland Delphi 2006 = Delphi for Dummies. — М.: Диалектика, 2009.