Затухающее движение

Затухающее движение

По экрану движется отрезок, оставляя за собой затухающий след. Алгоритм основан на уроке "Мячик, отскакивающий от границ окна"

Разместите на форме два компонента Timer1: TTimer и PaintBox1: TPaintBox с вкладки System. В инспекторе объектов (Object Inspector) выставьте начальные значения свойств

Timer1:
 Enabled: false
 Interval: 20
 
TPaintBox1:
 Align: alClient
 
TForm1:
 Color: clBlack

Для работы программы понадобятся переменные и процедура движения. Нажмите F12 и перейдите в редактор кода. В разделах type, var и const впишите следующие типы и переменные

 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    PaintBox1: TPaintBox;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
TPoints= Record
  X,Y: Real;
  End;
 
Const
 CountPoint=50;  // Количество линий в фигуре
 DistLim=50;     // Расстояние до края формы откуда начинается поворот
 
var
  Form1: TForm1;
  Pn,Pn2: Array [1..300] of TPoints;  // Концы отрезков
  dx,dy,dx2,dy2: Real;    // Приращение движения

В разделе implementation создайте процедуру, которая будет отвечать за движение отрезка

Procedure DrawPoints;
Var i:integer;
Begin
With Form1.PaintBox1 do
 Begin
 For i:=2 to CountPoint do
    Begin
    Canvas.Pen.Color:=RGB(255-round(5*i),0,255-round(5*i));
    Canvas.MoveTo(Round(Pn[i].X),Round(Pn[i].Y));
    Canvas.LineTo(Round(Pn2[i].X),Round(Pn2[i].Y));
    end;
 end;
End;

Для компонента Timer1 на вкладке Events в инспекторе объектов напротив события OnTimer сделайте двойной щелчок. Это действие создаст автоматически процедуру procedure TForm1.Timer1Timer(Sender: TObject). Заполните ее

procedure TForm1.Timer1Timer(Sender: TObject);
begin
With PaintBox1 do
begin
if Pn[1].X<DistLim then dx:=dx-0.4;
if Pn[1].X>Width-DistLim then dx:=dx+0.4;
if Pn[1].Y<DistLim then dy:=dy-0.2;
if Pn[1].Y>Height-DistLim then dy:=dy+0.2;
if Pn2[1].X<DistLim then dx2:=dx2-0.4;
if Pn2[1].X>Width-DistLim then dx2:=dx2+0.4;
if Pn2[1].Y<DistLim then dy2:=dy2-0.2;
if Pn2[1].Y>Height-DistLim then dy2:=dy2+0.2;
end;
Pn[1].X:=Pn[2].X-dx;
Pn[1].Y:=Pn[2].Y-dy;
Pn2[1].X:=Pn2[2].X-dx2;
Pn2[1].Y:=Pn2[2].Y-dy2;
 
Move(Pn[1],Pn[2],CountPoint*SizeOf(TPoints));
Move(Pn2[1],Pn2[2],CountPoint*SizeOf(TPoints));
DrawPoints;
end;

Для формы Form1 на вкладке Events создайте аналогично для события OnCreate процедуру procedure TForm1.FormCreate(Sender: TObject); и впишите следующий код

procedure TForm1.FormCreate(Sender: TObject);
Var i: Integer;
begin
With PaintBox1 do
begin
Timer1.Enabled:=True;
Pn[1].X:=Width-DistLim*2;
Pn[1].Y:=Height-DistLim;
Pn2[1].X:=Width-DistLim;
Pn2[1].Y:=Height-DistLim*2;
dx:=4; dx2:=3;
dy:=4; dy2:=2;
 For i:=2 to CountPoint do
    Begin
    Pn[i].X:=Pn[i-1].X+dx;
    Pn[i].Y:=Pn[i-1].Y+dy;
    Pn2[i].X:=Pn2[i-1].X+dx2;
    Pn2[i].Y:=Pn2[i-1].Y+dy2;
    end;
end;
DrawPoints;
end;

Запустите программу. Run.

СКАЧАТЬ ПРОГРАММУРазмер
Lines.exe (293)384.5 кб

Последние комментарии

  • cialis 10 mg 4 tablet register http://viagra-withoutdoctors.com - viagra without a doctor prescription usa cialis 10mg name viagra without a doctor prescription - cialis tadalafil cheapest online guestbook.php?sn= cheap cialis pills online
  • Красивые девушки любят позировать рядом с дорогими автомобилями http://hddevki.ru/uploads/posts/2016-05/medium/1462333024_image-712.jpg фото сильный секс на кровате, порно развлечения богатых женщин бесплатно фото http://hddevki.ru/
  • Услуги для тех, кто пропустил 6115172 купить больничный лист

Счетчики