Мультипликация
Под мультипликацией обычно понимается движущийся и меняющийся рисунок. В простейшем случае рисунок может только двигаться или только меняться.
Как было показано выше, рисунок может быть сформирован из графических примитивов (линий, окружностей, дуг, многоугольников и т. д.). Обеспечить перемещение рисунка довольно просто: надо сначала вывести рисунок на экран, затем через некоторое время стереть его и снова вывести этот же рисунок, но уже на некотором расстоянии от его первоначального положения. Подбором времени между выводом и удалением рисунка, а также расстояния между старым и новым положением рисунка (шага перемещения), можно добиться того, что у наблюдателя будет складываться впечатление, что рисунок равномерно движется по экрану.
Следующая простая программа, текст которой приведен в листинге 10.8, а вид формы – на рис. 10.15, демонстрирует движение окружности от левой к правой границе окна программы.
Рис. 10.15. Форма программы Движущаяся окружность
Листинг 10.8. Движущаяся окружность.
unit mcircle_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCTRLs, StdCTRLs; type TForm1 = class (TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject}; procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; implementation {$R *.DFM} var Form1: TForml; x,y: byte; // координаты центра окружности dx: byte; // приращение координаты x при движении окружности // стирает и рисует окружность на новом месте procedure Ris; begin // стереть окружность form1.Canvas.Pen.Color: = form1.Color; form1.Canvas.Ellipse(x,y,x+10,y+10); x: = x+dx; // нарисовать окружность на новом месте form1.Canvas.Pen.Color: = clBlack; form1.Canvas.Ellipse(x,y, x+10, y+10); end; // сигнал от таймера procedure TForm1.Timer1Timer(Sender: TObject); begin Ris; end; procedure TForm1.FormActivate(Sender: TObject); begin x: = 0; y: = 10; dx: = 5; timer1.Interval: = 50; // период возникновения события OnTimer – 0.5 сек form1.canvas.brush.color: = forml.color; end; end.
Основную работу выполняет процедура Ris, которая стирает окружность и выводит ее на новом месте. Стирание окружности выполняется путем перерисовки окружности поверх нарисованной, но цветом фона.