Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 18:03   #1
werrey
Форумчанин
 
Регистрация: 01.02.2011
Сообщений: 105
По умолчанию Перемещение Image по заданной траектории.

Здравствуйте.

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

Тут сами значения не важны, главное суть понять, приведите пример небольшой пожалуйста, или поправьте мой недоделанный код:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, pngimage, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   x,y,i,h : integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
x:=40;
i:=2;
y:=40;
h:=1;
Image1.Left:= x;
Image1.Top:= y;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

Image1.Left:= x;
Image1.Top:= y;
//x:=x+(i*h);
y:=y+(i*h);
if y =150  then
Begin
i:=2;
//y:=200;
y:=150;
 //y:=y+(i*h);
h:=h*-1;
end;

if y =40  then
Begin
x:=x+(i*h);

i:=2;
y:=40;
x:=40;
h:=h*-1;

end;
 end;
end.
Что-то никак сообразить не могу, заранее благодарю.



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 31.05.2011 в 19:57.
werrey вне форума Ответить с цитированием
Старый 31.05.2011, 20:04   #2
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Тут либо через таймер, либо задавать направленность, могу предложить только вариант через клавиши вверх, вниз, влево и вправо, а там на усматрение
Код:
procedure TForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Case Key of
 VK_RIGHT : begin image1.left:=image1.left+5;
 if (form.ClientWidth)<=(image1.Left+image1.Width) then begin
 image1.Left:=form.ClientWidth-image1.Width;
 end;
 end;
 VK_left : begin image1.left:=image1.left-5;
  if (image1.Left)<=0 then begin
 image1.Left:=0;
 end;
 end;
 VK_UP : begin image1.Top:=image1.Top-5;
  if (image1.Top)<=0 then begin
 image1.Top:=0;
 end;
 end;
 VK_down : begin image1.Top:=image1.Top+5;
  if (form.ClientHeight)<=(image1.Top+image1.Height) then begin
 image1.Top:=form.ClientHeight-image1.Height;
 end;
 end;
 end;
end;
bulldog5293 вне форума Ответить с цитированием
Старый 31.05.2011, 20:26   #3
werrey
Форумчанин
 
Регистрация: 01.02.2011
Сообщений: 105
По умолчанию

У меня и так через таймер сделано, в примере картинка двигается сверху вниз и назад, а как сделать например, чтобы она двигалась по прямоугольной траектории, а потом в обратном направлении?
werrey вне форума Ответить с цитированием
Старый 01.06.2011, 16:06   #4
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

вот пример двигается по прямоугольной траектории (циклично), для того что бы двигалась обратно скорректирую массив WayPoint

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Image: TRadioButton;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    ToX, ToY: integer;
    CurX, CurY, Dx, Dy: real;
    TargetNum: integer;
    procedure CalcNextTarget();
    { Private declarations }
  public
    { Public declarations }
  end;

const
WayPoint: array[0..3,0..1] of integer =
 ((100, 100),
  (100, 400),
  (400, 400),
  (400, 100)
 );
Step = 6;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CalcNextTarget;
var
 d: real;
 X, y: integer;
begin
 if TargetNum < 0 then TargetNum := 0
  else TargetNum := (TargetNum + 1) mod length(WayPoint);
 x := waypoint[TargetNum,0];
 y := waypoint[TargetNum,1];
 d := sqrt(sqr(curx - X) + sqr(cury - Y))/step;
 dx := (x - curx) / d;
 dy := (y - cury) / d;
 tox := x;
 toy := y;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (sqrt(sqr(curx - tox) + sqr(cury - toy)) < step) then CalcNextTarget();
  curx := curx + dx;
  cury := cury + dy;
  image.Left := round(curx) - 8;
  image.Top := round(cury) - 8;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TargetNum := -1;
CurX := image.Left + 8;
Cury := image.top + 8;
CalcNextTarget;
end;

end.
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перемещение image dmitriegorovih Общие вопросы Delphi 14 21.09.2011 14:20
перемещение картинки нутри Image Prohor Компоненты Delphi 4 09.04.2010 20:50
Перемещение image КатенокСПб Компоненты Delphi 3 22.05.2009 10:41
Перемещение рисунка по траектории Noob333 Помощь студентам 1 28.04.2009 10:42
движение вокруг тела по заданной траектории PADOCTb Помощь студентам 2 12.10.2008 16:39