#1 10-06-2010 12:37

WinuX
Registered: 06-03-2009
Posts: 138

Проверить, что точка лежит впереди игрока

Нужно проверить, лежит ли определённая точка впереди игрока. Так объяснить не могу, поэтому приложу скриншоты. Вроде старался, чтобы понятно было всё.

Offline

#2 10-06-2010 12:46

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Проверить, что точка лежит впереди игрока

Самый простой способ - с помощью "actor store pos with offset" получить координаты двух точек, находящихся на одинаковых расстояниях от игрока - первая точка позади игрока, вторая точка впереди. Находим расстояния между заданной точкой и двумя полученными точками. В зависимости от того, какое из двух расстояний меньше, будет определяться то, лежит заданная точка спереди или позади игрока.

Offline

#3 10-06-2010 13:59

WinuX
Registered: 06-03-2009
Posts: 138

Re: Проверить, что точка лежит впереди игрока

store pos with offset не нашёл.
есть такое
04C4: store_coords_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 from_actor 215@ with_offset 1.0 3.0 1.0
но тогда будет определение только по линиям относительно начала координат. В принципе, можно, покумекаю над этим, если, конечно, другого способа нет

хотя тогда проще установить угол актёра и на его основе выбрать оффсет

Last edited by WinuX (10-06-2010 14:03)

Offline

#4 10-06-2010 14:46

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Проверить, что точка лежит впереди игрока

Если я ничего не путаю, оффсеты - не на север, восток и вверх, а вперёд, вправо и вверх относительно актёра.

Offline

#5 10-06-2010 15:07

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Проверить, что точка лежит впереди игрока

Рисую картинку - так будет понятнее:
21f098e60e33t.jpg
Код для решения задачи:

0@ = X
1@ = Y
2@ = Z
04C4: store_coords_to 3@ 4@ 5@ from_actor $player_actor with_offset 0.0 1.0 0.0 
04C4: store_coords_to 6@ 7@ 8@ from_actor $player_actor with_offset 0.0 -1.0 0.0
050A: 9@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@ 
050A: 10@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 6@ 7@ 8@
if
    0025:   9@ > 10@ // (float)
then
    // точка позади игрока
else
    // точка впереди игрока или (что мало вероятно) на линии, разделяющей плоскость
end

Если я ничего не путаю, оффсеты - не на север, восток и вверх, а вперёд, вправо и вверх относительно актёра.

Совершенно верно, оффсеты отсчитываются не в глобальной, а в локальной системе координат (связанной с игроком, машиной и т.п.)

Last edited by Den_spb (10-06-2010 15:08)

Offline

#6 10-06-2010 17:03

WinuX
Registered: 06-03-2009
Posts: 138

Re: Проверить, что точка лежит впереди игрока

о как. Всё понятно, спасибо smile

Offline

Board footer

Powered by FluxBB