Создаем Анимацию на DelphiПостроение анимированных сцен на Delphi.

Заготовки для создания динамических игр на Delphi

 

 

Используемые компоненты

 

Image1 (Графический холст)  находится на вкладке Additional

Timer1  (Таймер)

 

Цель работы.

Создадим несложную анимацию, по морю будет плавать нарисованный нами в Paint е  кораблик, которым мы можем управлять с помощью стрелок курсора клавиатуры

 

 

 

 

1)      И так находим изображение моря. Задаем размер картинки в пикселях  600*400. Для этого можем использовать программу Фотошоп или тот же Paint. Задаем имя картинке fon.bmp

 

2)      Рисуем в программе Paint небольшой кораблик установив размер картинки 110*140 пикселей Задаем имя картинке korb.bmp

Существенно, что вокруг кораблика белый фон.

Используя команду korb.transparent:=true;//Прозрачность вокруг контура корабля

Белый фон преобразуется в прозрачный фон.

 

Теперь немного теории

В описании переменных объявляем две переменных для хранения графических картинок, тип tbitmap

 

  fon:tbitmap;//Графический образ  Фона

  korb: :tbitmap;//Графический образ  корабля

 

Для того чтобы вывести на экран изображения нужно

1)      Активировать  созданные переменные

fon:=tbitmap.Create;//

korb:=tbitmap.Create;//

 

2)      Загрузить изображения в эти переменные

fon.LoadFromFile('fon.bmp');//Загрузить в переменную 'fon' файл  'fon.bmp'

korb.LoadFromFile('korb.bmp');//Загрузить в переменную 'korb' файл  'korb.bmp'

 

3)      Установить прозрачный фон вокруг корабля

korb.transparent:=true;//Прозрачность вокруг контура корабля

 

4)      И наконец вывести эти изображения на графический холст Image

image1.Canvas.Draw(0,0,fon);//

image1.Canvas.Draw(x,60,korb);//

При этом первая цифра в скобках, это координата x, а вторая цифра соответственно координата y

5)      Для того , чтобы изображения стали двигаться, необходимо динамически менять координаты изображений на холсте , желательно стирая старое изображение.

Эту задачу выполняет компонент Timer

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

x:=x+shx;//текущая координата + шаг

if x>500 then shx:=shx*-1;// ограничение справа

if x<0 then shx:=shx*-1;//ограничение слева

image1.Canvas.Draw(0,0,fon);//возобновление фона

image1.Canvas.Draw(x,60,korb);//движение корабля

end;

 

Один раз за одну сотую секунды он пересчитывает координату x корабля

x:=x+shx;//текущая координата , при этом переменная shx (шаг движения)

может принимать как, положительные так и отрицательные значения

С помощью двух условий создаем ограничения для движения слева и справа.

 

6) Чтобы, управлять кораблем стрелками клавиатуры, используем событие в evens на форме rmKeyDown

 

procedure TForm1.rmKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

if key=37 then shx:=-15;//движение влево

if key=39 then shx:=15;//движение вправо

 

 

Привожу полный исходный код программы

 

unit pav;

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  ExtCtrls;

 

type

  TForm1 = class(TForm)

    Image1: TImage;

    Timer1: TTimer;

    procedure FormCreate(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure rmKeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

//Описание типов переменных

var

  Form1: TForm1;

  fon:tbitmap;//ГРАФИЧЕСКИЙ ОБРАЗ Фона

  KORB:TBITMAP;//ГРАФИЧЕСКИЙ ОБРАЗ корабля

  x:integer;//координаты X корабля

  shx:integer;//Шаг движения корабля по X

 

implementation

 

{$R *.DFM}

 

//Старт главной формы

procedure TForm1.FormCreate(Sender: TObject);

begin

shx:=6;

//

fon:=tbitmap.Create;//

korb:=tbitmap.Create;//

//

fon.LoadFromFile('fon.bmp');//Загрузить в переменную 'fon' файл  'fon.bmp'

//

korb.LoadFromFile('korb.bmp');//Загрузить в переменную 'korb' файл  'korb.bmp'

korb.transparent:=true;//Прозрачность вокруг контура корабля

//

image1.Canvas.Draw(0,0,fon);//

image1.Canvas.Draw(x,60,korb);//

end;

 

//Работа таймера движение корабля

procedure TForm1.Timer1Timer(Sender: TObject);

begin

x:=x+shx;//текущая координата + шаг

if x>500 then shx:=shx*-1;// ограничение справа

if x<0 then shx:=shx*-1;//ограничение слева

image1.Canvas.Draw(0,0,fon);//возобновление фона

image1.Canvas.Draw(x,60,korb);//движение корабля

//

end;

 

//Изменения направления движения корабля с клавиатуры

procedure TForm1.rmKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

if key=37 then shx:=-15;//движение влево

if key=39 then shx:=15;//движение вправо

end;

 

end.

 


Перейти на Главную


<<НАЗАД