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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2010, 19:03   #11
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Все вышенаписанное является одним и тем же, но разными словами сказанным. При этом скорость неравномерна, например ровно вверх очень медленно, а ровно по горизонтали очень быстро.
Gapro вне форума Ответить с цитированием
Старый 11.03.2010, 21:21   #12
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Алгоритм косой, но работает.
Скорость - у нас постоянная, в моем случае равна 10. В процедуре щелчка мыши вычисляем угол наклона траектории, потом скорость по Х умножаем на cos угла, по Y на sin угла. После чего засекаем время передвижения, для этого делим всю траекторию(гипотенузу) на скорость. После запускаем таймер, там мы прибавляем координаты и уменьшаем время действия, если время действия меньше или равно 0, то отключаем таймер.

На форме таймер и Image. Скорость равна 10.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Timer1Timer(Sender: TObject);
  private
    t:integer;
    vx,vy:real;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  lx,ly:integer;
  a:single;
begin
  lx:=x-image1.Left;
  ly:=y-image1.Top;
  a:=arctan2(ly,lx);
  vx:=10*cos(a);
  vy:=10*sin(a);
  t:=round(sqrt(lx*lx+ly*ly) / 10);
  timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  image1.Top:=image1.Top+round(vy);
  image1.Left:=image1.Left+round(vx);
  t:=t-1;
  if t<=0 then timer1.Enabled:=false;
end;

end.
В общем тоже самое, что и написал Dj_smart, только он не учел время действия движения...

Последний раз редактировалось Ckomoroh; 11.03.2010 в 21:33.
Ckomoroh вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Engine as345 Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 14.01.2010 15:19
Игра на движке Torque Game Engine Advanced Pasha199 Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 08.07.2009 00:58
omega benjaminfran Компоненты Delphi 5 26.02.2008 11:44
Не могу проинсталлировать OMEGA V-int Компоненты Delphi 4 04.11.2007 14:11
Aquatica engine MagicIndie Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 23.04.2007 18:33