Программирование - это просто
Advertisement
Главная arrow Уроки Delphi arrow Пишем компьютерную игру на Delphi arrow Перемещение многоугольника по координатной плоскости  (TCanvas, TImage, Polygon, TTimer)
30.11.2021 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Перемещение многоугольника по координатной плоскости  (TCanvas, TImage, Polygon, TTimer) Печать E-mail
Автор megabax   
22.10.2009 г.
New Page 2

Перемещение многоугольника по координатной плоскости  (TCanvas, TImage, Polygon, TTimer)

Прежде чем начать урок, сделаю небольшое сообщение. Я начал писать библиотеку для управления объектами компьютерных игр. Подробнее здесь.

А теперь, собственно, урок. Сегодня мы научимся программирование движение объекта по экрану. Для начала вспомним предыдущий урок. Нам понадобятся исходники этого урока. Если у вас их нет, то можете скачать их здесь.

И так, открываем исходники предыдущего урока, и, первое, что мы делаем, это в разделе Private класса TfrmGameSample добавляем новые поля, а так же процедуру DrawFigure (добавленное выделено красным).

TfrmGameSample = class(TForm)
     btnShow: TButton;
     Label1: TLabel;
     Label2: TLabel;
     Label3: TLabel;
     Label4: TLabel;
     edRatioX: TEdit;
     edRatioY: TEdit;
     imImage: TImage;
     seX: TSpinEdit;
     seY: TSpinEdit;
     Timer: TTimer;
     seDelay: TSpinEdit;
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure TimerTimer(Sender: TObject);
     procedure btnShowClick(Sender: TObject);
     procedure seDelayChange(Sender: TObject);
private
    { Private declarations }
    Points:array[1..5] of TPoint;
    Axes:TAxesSystem;
    IsStarted:boolean;
    procedure DrawFigure;

public
   { Public declarations }
end;

Если у вас класса TAxesSystem объявлен после TfrmGameSample то перенесите его вперед. Теперь реализуем процедуру DrawFigure:

procedure TfrmGameSample.DrawFigure;
var Rect:TRect;
begin
     //очистим поле для рисования
    Rect.Left:=0;
    Rect.Top:=0;
    Rect.Right:=imImage.Width;
    Rect.Bottom:=imImage.Height;
    imImage.Canvas.FillRect(Rect);

   //нарисуем
   imImage.Canvas.Polygon(Points);
end;

Напишем обработчик события FormCreate нашей формы:

procedure TfrmGameSample.FormCreate(Sender: TObject);
var i:integer;
      Trian:array[1..5,1..2] of double;
begin
      IsStarted:=false;

     Trian[1,1]:=1;
     Trian[1,2]:=2;

     Trian[2,1]:=5;
     Trian[2,2]:=4;

     Trian[3,1]:=4;
     Trian[3,2]:=2;

     Trian[4,1]:=4;
     Trian[4,2]:=-1;

     Trian[5,1]:=3;
     Trian[5,2]:=-1;

     Axes:=TAxesSystem.Create;

    //заполним параметры координатной системы
    Axes.X:=seX.Value;
    Axes.Y:=seY.Value;
    Axes.RatioX:=StrToFloat(edRatioX.Text);
    Axes.RatioY:=StrToFloat(edRatioY.Text);

    for i:=1 to 5 do Points[i]:=Axes.GetPoint(Trian[i,1],Trian[i,2]);
end;

так как мы создали объект класса TAxesSystem, то нам его и удалять. поэтому реализуем событие FormDestroy:

procedure TfrmGameSample.FormDestroy(Sender: TObject);
begin
     FreeAndNil(Axes);
end;

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

Наконец, дошли до кнопочки. Заменим у нее заголовок на "Старт" и пропишем обработчик OnClick:

procedure TfrmGameSample.btnShowClick(Sender: TObject);
begin
     IsStarted:=true;
     DrawFigure;
end;

Тем самым мы включили флаг, что картинка у нас нарисована и нарисовали ее.

А еще нам понадобиться класс TTimer. Его можно найти на закладке System*:

Перемещение многоугольника по координатной плоскости  (TCanvas, TImage, Polygonб TTimer)

Кладем этот объект на форму и прописываем у него обработчик события OnTimer:

procedure TfrmGameSample.TimerTimer(Sender: TObject);
var i:integer;
begin
    if IsStarted then
    begin
        for i:=1 to 5 do Points[i].X:=Points[i].X+1;
        DrawFigure;
    end;
end;

в данном обработчике мы проверяем флаг (нажимали ли мы до этого на кнопку).  Если процесс у нас запущен, то просто меняем координаты точек прямоугольника, сдвигая его влево. Затем рисуем. Напомню, что процедура очистки поля для рисования у нас есть в DrawFigure.

Теперь еще положим на форму объект TSpinEdit*:

Перемещение многоугольника по координатной плоскости

И напишем его обработчик:

procedure TfrmGameSample.seDelayChange(Sender: TObject);
begin
     Timer.Interval:=seDelay.Value;
end;

Если вы запустите программа и нажмете кнопку "Старт", то по экрану станет очень медленно ползти фигура. Изменим интервал таймера:

Перемещение многоугольника по координатной плоскости  (TCanvas, TImage, Polygonб TTimer)


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит Borland Delphi.. 


Последнее обновление ( 06.11.2011 г. )
 
« След.   Пред. »
 
© 2021 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги