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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2010, 17:09   #1
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
Вопрос Движение на движке OMEGA ENGINE

Пытаюсь создать игру на движке OMEGA ENGINE, но возникла проблема. В моей игре юнит движется в точку, куда кликнула мышь. Но возникает неприятный эффект. Например если я кликнул немного выше юнита, но намного правее юнита, он двигается, одновременно увеличивая х и у, сначало верх по диагонали, а потом по прямой направо.
А как сделать так, чтобы юнит двигался равномерно и точно по прямой линии в заданную точку?

Вот участок моего кода

Код:
procedure Timer1;
Begin
 If (X=Xo) and (Y=Yo) then exit;
 If X<>Xo then
   If X-Xo>0 then X:=X-1*k else X:=X+1*k;
 If Y<>Yo then
   If Y-Yo>0 then Y:=Y-1 else Y:=Y+1;
End;
Gapro вне форума Ответить с цитированием
Старый 16.01.2010, 17:22   #2
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Мне нужно рассчитать скорость по X и по Y такую, чтобы расстояние по X и Y юнит проходил за одно и то же время. То есть если по X большое расстояние а по Y маленькое то надо по X большую скорость а по Y маленькую.
Вадим Буренков вне форума Ответить с цитированием
Старый 16.01.2010, 19:09   #3
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Я пробовал, но тогда юнит начал двигаться неравномерно
Gapro вне форума Ответить с цитированием
Старый 16.01.2010, 19:21   #4
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Gapro выполняйте условие, как говорит Вадим Буренков, сравнивайте расстояние до точки по-X и по-Y, большее из них делите на меньшее узнаете приращение движения, ...разумеется от 1 для большего.
Например, был в точке (X4,Y4) и перемещается в (X6,Y9). Сравниваем, узнаем, что Y - путь длиннее, делим Abs(Y9-Y4)/Abs(X6-X4) - получится на сколько нужно задержать скорость для меньшего пути, в данном случае к Y каждый такт прибавляется 1, а к Y прибавляется 1 только через 2,5 такта, ...разумеется, нужно округлять данные через Round.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 16.01.2010, 19:43   #5
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Я так и делал, но например если Y увеличивается намного сильнее X, то он перемещается с намного большей скоростью, а нужно чтобы равномерно(
Gapro вне форума Ответить с цитированием
Старый 16.01.2010, 21:53   #6
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Если задается меньшая скорость для одной из координат, то скорость для другой координаты должна быть начальной. Если оба значения расстояний равны, обе скорости должны быть начальными. Т.е. ускорений нет, есть замедление и исходная.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.01.2010, 16:40   #7
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Код:
uses math;
const coef=0.5;
var a:single;
begin
  a:=arctan2(Y-Y0,X-X0);
  X:=X+cos(a)*coef;
  Y:=Y+sin(a)*coef;
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 17.01.2010, 18:54   #8
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Да, я понял это способ, но равномерно двигаться он все равно небудет, например ровно по диагонали он будет медленно перемещаться, а почти по прямой переместится очень быстро...
Gapro вне форума Ответить с цитированием
Старый 09.03.2010, 21:26   #9
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Цитата:
uses math;
const coef=0.5;
var a:single;
begin
a:=arctan2(Y-Y0,X-X0);
X:=X+cos(a)*coef;
Y:=Y+sin(a)*coef;
В результате этого кода обьект наоборот улетает куда то за пределы экрана при активации
Gapro вне форума Ответить с цитированием
Старый 11.03.2010, 06:24   #10
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Необходимо найти скорости X и Y, являющиеся катетами треугольника. Гипотенуза-это константа, скорость движения в плоскости. По теореме Пифагора V^2=Y^2+X^2. Выражаем Y через Х или Х через Y, учитывая их соотношение. Например, если Х вдвое больше Y, то уравнение принимает вид V^2=Y^2+(2Y)^2. Выражаем единственное неизвестное (в данном случае Y), затем через Y выражаем X.
Изображения
Тип файла: bmp puc.bmp (107.3 Кб, 148 просмотров)
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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