#1 28-11-2009 16:31

WinuX
Registered: 06-03-2009
Posts: 138

Проеханное расстояние

Как можно вычислить проеханное на машине расстояние? (для последующего отображения на экране)

Offline

#2 28-11-2009 18:01

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

Re: Проеханное расстояние

Когда-то написал скрипт, выводящий на экран скорость перемещения игрока и расстояние, на которое он переместился (Y - включить счетчик, N -выключить и обнулить счетчик).

{$CLEO}
wait 0
repeat
    wait 0
until player.Defined($PLAYER_CHAR)
while true
    wait 0
    repeat
        wait 0
    until 00E1:   player 0 pressed_key 11
    wait 0
    7@ = 0.0  // перемещение игрока
    actor.StorePos($PLAYER_ACTOR,0@,1@,2@) // записываем координаты в переменные
    repeat
        wait 0
        actor.StorePos($PLAYER_ACTOR,3@,4@,5@) // записываем новые координаты
        050A: 6@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@ // вычисляем перемещение
        005B: 7@ += 6@ // (float) - прибавляем найденное перемещение к общему перемещению
        0087: 0@ = 3@ // (float) - меняем старые значения координат на новые
        0087: 1@ = 4@ // (float)
        0087: 2@ = 5@ // (float) 
        0092: 8@ = float 7@ to_integer
        06AC: 9@ = actor $PLAYER_ACTOR movement_speed
        0092: 10@ = float 9@ to_integer 
        03F0: enable_text_draw 1 
        045A: draw_text_1number 5.0 5.0 GXT 'NUMBER' number 8@
        045A: draw_text_1number 5.0 20.0 GXT 'NUMBER' number 10@
    until 00E1:   player 0 pressed_key 10 // повторяем цикл, пока не нажата кнопка
end

Если надо сделать, чтобы код работал только в машине, то надо добавить соответствующие проверки.

Offline

#3 28-11-2009 20:46

WinuX
Registered: 06-03-2009
Posts: 138

Re: Проеханное расстояние

Спасибо!
Методом проб и ошибок, нашёл, что чтобы получить расстояние в километрах, надо разделить на 16 (по спидометру, тут где-то был выложен, скорость машны умножается на 3,7) - насколько это точно?

Last edited by WinuX (28-11-2009 21:03)

Offline

#4 28-11-2009 21:34

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

Re: Проеханное расстояние

Единицы скорости и перемещения, используемые в скриптах - м/с и м. Чтобы выводить на экран скорость в км/ч, надо домножить значение на 3,6 перед округлением. Чтобы выводить перемещение в км, надо делить значение на 1000 перед округлением.

Offline

#5 28-11-2009 22:27

WinuX
Registered: 06-03-2009
Posts: 138

Re: Проеханное расстояние

надо делить значение на 1000 перед округлением.

да нуу, много слишком, пусть будет 16 grin

Offline

#6 28-11-2009 23:24

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

Re: Проеханное расстояние

Можешь проверить - взять на карте 2 точки, записать их координаты, затем проехать от точки до точки по прямой и сравнить полученное расстояние с выведенным на экран.

Offline

#7 29-11-2009 01:38

GTASA
Registered: 13-09-2008
Posts: 476

Re: Проеханное расстояние

050A: 6@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@ // вычисляем перемещение
         
6@ *= 3.6    //////////////////////////////Чтобы сделать не мили, а километры в час, нужно вот это добавить между двумя строчками?

         005B: 7@ += 6@ // (float) - прибавляем найденное перемещение к общему перемещение

Offline

#8 29-11-2009 09:47

WinuX
Registered: 06-03-2009
Posts: 138

Re: Проеханное расстояние

GTASA wrote:

050A: 6@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@ // вычисляем перемещение
         
6@ *= 3.6    //////////////////////////////Чтобы сделать не мили, а километры в час, нужно вот это добавить между двумя строчками?

         005B: 7@ += 6@ // (float) - прибавляем найденное перемещение к общему перемещение

стоп, стоп. мне нужна не скорость, а расстояние. Оно по умолчанию в чём?

Offline

#9 29-11-2009 11:00

WinuX
Registered: 06-03-2009
Posts: 138

Re: Проеханное расстояние

короче не знаю, в чём оно, но чтобы километры получить, надо это что-то разделить на 16,8 (примерно)
стоп, или это спидометр брешет?
да нет, спидометр не брешет.
за час движения со скоростью 20 километров в час игрок пробегает 336 чего-то там

Last edited by WinuX (29-11-2009 11:15)

Offline

#10 29-11-2009 11:10

GTASA
Registered: 13-09-2008
Posts: 476

Re: Проеханное расстояние

Я тебя не спрашиваю, с спрашиваю автора: Правильно ли я вставил, чтобы получить километры, а не мили?

Offline

#11 29-11-2009 11:41

WinuX
Registered: 06-03-2009
Posts: 138

Re: Проеханное расстояние

правильно, 3,6, уже обсуждали

Offline

#12 29-11-2009 13:07

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

Re: Проеханное расстояние

GTASA wrote:

050A: 6@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@ // вычисляем перемещение
         
6@ *= 3.6    //////////////////////////////Чтобы сделать не мили, а километры в час, нужно вот это добавить между двумя строчками?

         005B: 7@ += 6@ // (float) - прибавляем найденное перемещение к общему перемещение

Чтобы скорость выводилась в км/ч, а не в метрах в секунду, надо так сделать:

        06AC: 9@ = actor $PLAYER_ACTOR movement_speed // значение записывается в метрах в секунду
        9@ *= 3.6 // здесь домножаем (1 м/с = 3.6 км/ч)
        0092: 10@ = float 9@ to_integer

за час движения со скоростью 20 километров в час игрок пробегает 336 чего-то там

Ты о внутриигровом времени говоришь? Я говорю о реальном времени.

Last edited by Den_spb (29-11-2009 13:09)

Offline

#13 29-11-2009 16:27

WinuX
Registered: 06-03-2009
Posts: 138

Re: Проеханное расстояние

мда, видимо, ничего хорошего не получится из этой затеи. Всё время несостыковки получаются.

Offline

#14 30-11-2009 05:59

GTASA
Registered: 13-09-2008
Posts: 476

Re: Проеханное расстояние

Ден, а откуда это число? Просто когда я бегу, у меня показывает 40 км/ч, разве это реально?

Offline

#15 30-11-2009 13:54

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

Re: Проеханное расстояние

Присмотрись внимательнее: игрок на самом деле бежит нереально быстро, это относится и к езде на велосипеде (80 км/ч). То, что опкод выводит скорость в метрах в секунду, подтверждено экспериментами, в том числе и моими.

Last edited by Den_spb (30-11-2009 13:58)

Offline

Board footer

Powered by FluxBB