Движение по однородному фону
Линейное движение по однородному фону является довольно простым в плане программной реализации. Достаточно закрашивать объект цветом фона, изменять его координаты и прорисовывать в новом месте, повторяя эти действия через определенный интервал времени.
Для реализации анимации, помимо двух уже известных компонентов TPaintBox
(поле для рисования) и TButton
(кнопка запуска), понадобится компонент TTimer
со вкладки System. Компонент Timer имеет единственное событие OnTimer
, которое выполняется пока Timer включен с интервалом по времени, установленным в свойстве Interval
.
Расположите компонент Timer1
на форме. Установите его свойства Timer1.Interval := 100
и Timer1.Enabled := false
В коде программы необходимо прописать три процедуры. Процедуру отрисовки объекта procedure TForm1.Cloud
, процедуру, отрабатывающую на событие OnTimer
, — procedure TForm1.Timer1Timer
и процедуру запуска анимации, срабатывающую на нажатие кнопки, procedure TForm1.Button1Click
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons, ExtCtrls, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; PaintBox1: TPaintBox; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { private declarations } // координаты прорисовки объекта. Доступны всем процедурам класса TForm1 x1, y1 : Integer; public { public declarations } // процедура прорисовки облака procedure Cloud (x, y: Integer; ColorCloud: TColor); end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Cloud(x, y: Integer; ColorCloud: TColor); begin // прорисовка облака из двух эллипсов with PaintBox1.Canvas do begin Pen.Style := psClear; Brush.Color := ColorCloud; Ellipse(x,y,x+80,y+40); Ellipse(x+30,y+10,x+100,y+50); end; end; procedure TForm1.Button1Click(Sender: TObject); begin // установка начальных значений x1:=0; y1:=50; Timer1.Interval:=100; // прорисовка картинки по которой двигается объект PaintBox1.Canvas.Brush.Color := clBlue; PaintBox1.Canvas.Rectangle(0,0, PaintBox1.Width, PaintBox1.Height); // Включение таймера - запуск анимации Timer1.Enabled := true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin // Закраска объекта цветом фона Cloud(x1,y1,clBlue); // Изменение координат прорисовки x1:=x1+1; // Прорисовка объекта в новом месте Cloud(x1,y1,clWhite); end; end. |