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

2. Мультипликация

Под мультипликацией обычно понимается движущийся и меняющийся риcунок. В простейшем случае рисунок может только двигаться или только меняться.

Как было показано выше, рисунок может быть сформирован из графических примитивов (линий, окружностей, дуг, многоугольников и т. д.). Обеспечить перемещение рисунка довольно просто: надо сначала вывести рисунок на экран, затем через некоторое время стереть его и снова вывести этот рисунок, но уже на некотором расстоянии от его первоначального положения. Подбором времени между выводом и удалением рисунка, а также расстояния между старым и новым положением рисунка (шага перемещения), можно добиться того, что у наблюдателя будет складываться впечатление, что рисунок равномерно движется по экрану.

Пример: Следующая простая программа, текст которой приведен в листинге 1, а вид формы — на рис. 69, демонстрирует движение окружности от левой к правой границе окна программы.

Рис. 69. Форма программы

Листинг 1. Движущаяся окружность

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

Forml: TForml;

x,y: byte; // координаты центра окружности

dx: byte; // приращение координаты х при движении окружности

procedure Ris;

begin

// стереть окружность

forml.Canvas.Pen.Color:=forml.Color;

form1. Canvas. Ellipse (x,y,x-t-10, y+10) ;

//нарисовать окружность на новом месте

forml.Canvas.Pen.Color:=clBlack; forml.Canvas.Ellipse(x, y,x+10, y-t-10);

end;

procedure TForml.TimerlTimer(Sender: TObject)

begin

Ris;

end;

procedure TForml. FormActivate (Sender: TObject);

begin x:=0;

y:=10;

dx:=5;

timerl.Interval:=50; // период возникновения события OnTimer — 0.5 сек forml.canvas.brush.color:=form1.color; end;

end.

Основную работу выполняет процедура Ris, которая стирает окружность и выводит ее на новом месте. Стирание окружности выполняется путем перерисовки окружности поверх нарисованной, но цветом фона.

Для обеспечения периодического вызова процедуры Ris в форму программы добавлен невизуальный компонент Timer (таймер), значок которого находится на вкладке System палитры компонентов.

В табл. 73 перечислены свойства компонента Timer.

Таблица 73.

Значения свойства Timer

Свойство

Назначение

Name

Имя компонента. Используется для доступа к компоненту

Interval

Период генерации события OnTimer. Задается в миллисекундах

Enabled

Разрешение работы. Разрешает (значение True) или запрещает (значение False) генерацию события OnTimer

Добавляется компонент Timer к форме обычным образом, однако, так как компонент Timer является невизуальным, т. е. во время работы программы он не отображается на форме, поэтому его значок можно поместить в любое место формы.

Компонент Timer генерирует событие OnTimer. Период возникновения события OnTimer измеряется в миллисекундах и определяется значением свойства interval. Следует обратить внимание на свойство Enabled. Оно дает возможность программе "запустить" или "остановить" таймер. Если значение свойства Enabled равно False, то событие OnTimer не возникает. Событие OnTimer в рассматриваемой программе обрабатывается процедурой Timer1Timer, которая, в свою очередь, вызывает процедуру Ris. Таким образом, в программе реализован механизм периодического вызова процедуры Ris.

Примечание:

Переменные х, у (координаты центра окружности) и dx {приращение координаты х при движении окружности) объявлены вне процедуры Ris, т. е. они являются глобальными. Поэтому надо не забыть выполнить их инициализацию (в программе инициализацию глобальных переменных реализует процедура FormActivate).