Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pastukhov.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
97 Кб
Скачать
☆

Глава 1. Исследование предметной области

1.1.Назначение программы и обоснование разработки

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.

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