![]() |
![]() |
![]() |
Под мультипликацией
обычно понимается движущийся и меняющийся рисунок. В простейшем случае рисунок
может только двигаться или только меняться.
Как было показано выше,
рисунок может быть сформирован из графических примитивов (линий, окружностей,
дуг, многоугольников и т. д.). Обеспечить перемещение рисунка довольно просто:
надо сначала вывести рисунок на экран, затем через некоторое время стереть его
и снова вывести этот же рисунок, но уже на некотором расстоянии от его первоначального
положения. Подбором времени между выводом и удалением рисунка, а также расстояния
между старым и новым положением рисунка (шага перемещения), можно добиться того,
что у наблюдателя будет складываться впечатление, что рисунок равномерно движется
по экрану.
Следующая простая программа,
текст которой приведен в листинге 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, которая стирает окружность и выводит ее на новом месте. Стирание
окружности выполняется путем перерисовки окружности поверх нарисованной, но
цветом фона.
Для обеспечения периодического
вызова процедуры Ris в форму программы добавлен невизуальный компонент Timer
(таймер), значок которого находится на вкладке System палитры компонентов
(рис. 10.16). Свойства компонента Timer, перечислены в табл. 10.9.
Рис. 10.16. Значок
компонента Timer
Таблица 10.9.
Свойства компонента Timer
Свойство |
Определяет |
||
Name Interval
Enabled |
Имя компонента. Используется
для доступа к компоненту Период генерации события OnTimer. Задается
в миллисекундах Разрешение работы. Разрешает
(значение True) или запрещает (значение False) генерацию события OnTimer |
||
Добавляется компонент
Timer к форме обычным образом, однако, поскольку компонент Timer является невизуальным,
т. е. во время работы программы не отображается на форме, его значок можно поместить
в любое место формы.
Компонент Timer генерирует
событие OnTimer. Период возникновения события OnTimer измеряется в миллисекундах
и определяется значением свойства Interval. Следует обратить внимание на свойство
Enabled. Оно дает возможность программе "запустить" или "остановить"
таймер. Если значение свойства
Enabled равно False, то событие OnTimer не возникает.
Событие onTimer в рассматриваемой
программе обрабатывается процедурой TimeriTimer, которая, в свою очередь, вызывает
процедуру Ris. Таким образом, в программе реализован механизм периодического
вызова процедуры
Ris.
Примечание
Переменные х, у (координаты центра окружности) и dx (приращение координаты х при движении окружности) объявлены вне процедуры Ris, т. е. они являются глобальными. Поэтому надо не забыть выполнить их инициализацию (в программе инициализацию глобальных переменных реализует процедура FormActivate).
![]() |
![]() |
![]() |
Когда тот или иной физик использует понятие "физический вакуум", он либо не понимает абсурдности этого термина, либо лукавит, являясь скрытым или явным приверженцем релятивистской идеологии.
Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.
Для защиты релятивизма Поль Дирак ввел афизическое и алогичное понятие отрицательной энергии, а затем и существование "моря" двух компенсирующих друг друга энергий в вакууме - положительной и отрицательной, а также "моря" компенсирующих друг друга частиц - виртуальных (то есть кажущихся) электронов и позитронов в вакууме.
Однако такая постановка является внутренне противоречивой (виртуальные частицы ненаблюдаемы и их по произволу можно считать в одном случае отсутствующими, а в другом - присутствующими) и противоречащей релятивизму (то есть отрицанию эфира, так как при наличии таких частиц в вакууме релятивизм уже просто невозможен). Подробнее читайте в FAQ по эфирной физике.
|
![]() |