Как заставить картинку двигаться

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

Случайное движение

Например, изобразить полет бабочки в случайном направлении со случайной скоростью.

Для решения этой задачи поместим в окне компонент Image1:TImage, в свойство Picture компонента загрузим картинку, например изображение бабочки, которое предварительно создадим с использованием редактора Image Editor. Для задания позрачности будем использовать свойство Transparent = true, задать свойство Autosize = true для того, чтобы размер рамки компонента был равен размеру рисунка. Также поместим компонент Timer1:TTimer в область формы. Внешний вид окна на этапе проектирования изображен на рисунке:

как заставить картинку двигаться - student2.ru

Для таймера зададим свойство Interval, например, равным 100. На событие OnTimer напишем обработчик, который и будет выполнять основную функцию организации хаотичного движения бабочки.

При движении бабочки случайно задается направление ее движения и скорость по X и Y, при этом отслеживается, чтобы бабочка не вылетала за границы окна. Обработчик события OnTimer может иметь следующий вид:

procedure TForm1.Timer1Timer(Sender: TObject);

var k:integer;

dx,dy:integer;

begin

k:=random(4)+1; { задает направление движения}

dx:=random(10)+1; dy:=random(10)+1; {скорости по X и Y}

case k of

1: {вверх}

if Image1.top - dy > 0 then

Image1.Top:= Image1.Top - dy;

2: {вниз}

if Image1.top + dy < ClientHeight then

Image1.Top:= Image1.Top + dy;

3: {влево}

if Image1.left - dx > 0 then

Image1.left:= Image1.left - dx;

4: {вправо}

if Image1.left + dx <ClientWidth then

Image1.Left:= Image1.Left + dx;

END;

end;

Задание для самостоятельной работы.

Модифицируйте предыдущий пример, добавив еще несколько бабочек.

Движение по закону

Например, шарик двигается по окну, как по столу, отражаясь от его стенок. Для этого поместим в форму компонент img:TImage и компонент Timer:TTimer. Внешний вид формы на этапе проектирования изображен на рисунке:

как заставить картинку двигаться - student2.ru

На событие OnCreate формы напишем код, который задает значения смещения шарика по X и Y:

procedure Tfrm.FormCreate(Sender: TObject);

begin

dx:=9; dy:=7;

end;

На событие OnTimer компонента Timer напишем программный код, который позволяет смещать шарик:

procedure Tfrm.Timer1Timer(Sender: TObject);

begin

if (img.Left+img.Width>=frm.ClientWidth) or (img.Left<=0) then

dx:=-dx;

if (img.Top+img.Height>=frm.ClientHeight) or (img.Top<=0) then

dy:=-dy;

img.Left:=img.Left+dx;

img.Top:=img.Top+dy;

end;

Задание для самостоятельной работы

1. Модифицируйте рассмотренный пример, добавив еще несколько шариков.

2. Промоделируйте движение снаряда, выпущенного из пушки и летящего по параболе.

Управляемое движение

Например, требуется организовать управление движением жука в окне с помощью стрелок клавиатуры вверх, вниз, влево, вправо, так, чтобы жук не выходил за границы окна. Для отслеживания нажатия клавиш в окне можно использовать событие формы: OnKeyDown.

Событие OnKeyDown - выполняется как при нажатии одной клавиши, так и при одновременном нажатии двух клавиш, включая функциональные клавиши и управляющие клавиши, такие как Shift, Alt, Ctrl.

Заголовок процедуры обработки события имеет следующий вид:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

Процедуре обработки события OnKeyDown передаются три параметра:

Sender – указатель на объект источник события.

Shift – указывает какая из клавиш Shift, Alt, или Ctrl была нажата вместе с клавишей Key.

Key – задает код нажатой клавиши. Для не алфавитно-цифровых клавиш можно использовать виртуальные коды клавиш. Коды клавиш представляют собой константы. Например, в следующей таблице приведены некоторые виртуальные коды клавиш:

Код клавиши Описание
VK_RETURN Enter
VK_ESCAPE Escape
VK_LEFT Стрелка влево
VK_UP Стрелка вверх
VK_RIGHT Стрелка вправо
VK_DOWN Стрелка вниз
VK_DELETE Delete

Поместим в область формы компонент Image1:TImage. Зададим его свойства.

На событие OnKeyDown формы напишем программный код, который позволяет управлять движением жука. При нажатии стрелок вверх и вниз жук перемещается вверх и вниз на 10 пикселей. При нажатии стрелок влево и вправо жук также перемещается на 10 влево и вправо:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

case key of

{вверх}

VK_UP: if Image1.top -10 > 0 then Image1.top:=Image1.Top - 10;

{вниз}

VK_Down: if Image1.top +10 < ClientHeight then Image1.top:=Image1.Top + 10;

{влево}

VK_Left: if Image1.Left - 10 >0 then Image1.Left :=Image1.Left -10;

{вправо}

VK_Right: if Image1.Left +10 <ClientWidth then Image1.Left :=Image1.Left +10;

end;

end;

Задание для самостоятельной работы

Модифицируйте предыдущее задание так, чтобы жук не выходил за пределы неко­торой ограниченной прямоугольником области.

Наши рекомендации