Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

Страница 1 из 11
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Как получить скорость энтитьки лежащей на земле?
Как получить скорость энтитьки лежащей на земле?
tonline_kms65 Дата: Среда, 01.06.2016, 04:07:00 | Сообщение # 1
Сообщений: 182
Репутация: 2 [ +/- ]
Всем доброго времени.
У меня возник такой странный вопрос. Мне нужно получить скорость энтитьки.
Энтитька лежит на земле, т.е. по факту её Float:скорость[3] = 0.000. По всем 3 координатам её скорость = 0.
Каким способом можно получить её скорость? Сколько не пытаюсь - не могу сообразить.
 
TEIN Дата: Среда, 01.06.2016, 07:10:05 | Сообщение # 2
Сообщений: 551
Репутация: 73 [ +/- ]
ну, скорость = путь / время, а вообще, у тебя энтити на земле лежит, какая у нее скорость должна быть ?
 
tonline_kms65 Дата: Среда, 01.06.2016, 08:32:58 | Сообщение # 3
Сообщений: 182
Репутация: 2 [ +/- ]
Цитата TEIN ()
ну, скорость = путь / время, а вообще, у тебя энтити на земле лежит, какая у нее скорость должна быть ?


Смешно. Дальше некуда.
Ты сам то хоть раз пробовал определять скорость лежащего на земле пропа? Попробуй.
Это я вижу что у неё скорость = 0, а как это программе объяснить? Ей по барабану.

Какой может быть путь если она лежит на земле? И так же время. И кстати так как это проп_физик то все-равно есть небольшие движения (но это можно проигнорировать).

Добавлено (01.06.2016, 08:32:58)
---------------------------------------------
Вот так пробовал по формуле sqrt(x2 + y2 + z2)

decl Float:pos[3];
pos[0] = pos[0]*pos[0];
pos[1] = pos[1]*pos[1];
pos[2] = pos[2]*pos[2];

new Float:speed = SquareRoot(pos[0] + pos[1] + pos[2]);

Показывает speed >0 и всё.


Сообщение отредактировал tonline_kms65 - Среда, 01.06.2016, 08:35:47
 
TEIN Дата: Среда, 01.06.2016, 09:44:40 | Сообщение # 4
Сообщений: 551
Репутация: 73 [ +/- ]
с чего взял, что по формуле считаешь именно скорость?

на счет: какой может быть путь и т.д.,
корень из суммы квадратов разности координат будет давать ноль (если координаты не меняются, что логично, в принципе)
((new[0]-old[0])^2 + (new[1]-old[1])^2 + (new[2]-old[2])^2)^(1/2) = 0, это расстояние

по твоей же формуле получается, что прошлые позиции были в (0,0,0), потому то и > 0 однозначно

pos[0] = pos[0]*pos[0]; тоже самое, что (0-pos[0])^2 и т.д., где мы на 0 может забить, он не играет роли

это я к тому, что ты неправильно считаешь скорость


Сообщение отредактировал TEIN - Среда, 01.06.2016, 09:58:05
 
tonline_kms65 Дата: Среда, 01.06.2016, 16:31:24 | Сообщение # 5
Сообщений: 182
Репутация: 2 [ +/- ]
Цитата TEIN ()
с чего взял, что по формуле считаешь именно скорость?

на счет: какой может быть путь и т.д.,
корень из суммы квадратов разности координат будет давать ноль (если координаты не меняются, что логично, в принципе)
((new[0]-old[0])^2 + (new[1]-old[1])^2 + (new[2]-old[2])^2)^(1/2) = 0, это расстояние

по твоей же формуле получается, что прошлые позиции были в (0,0,0), потому то и > 0 однозначно
pos[0] = pos[0]*pos[0]; тоже самое, что (0-pos[0])^2 и т.д., где мы на 0 может забить, он не играет роли
это я к тому, что ты неправильно считаешь скорость


Я с тобой полностью согласен. Я не силен в математике. Но даже я вижу что здесь, в этой формуле не хватает координат.
В том то и дело я не могу сообразить как получить старые(old) координаты.

По идее - можно например при создании дрона записать куда нибудь начальные координаты (назову их абсолютными) и уже исходя из разницы между положением текущих координат относительно абсолютных получать скорость. Это как вариант.
Но меня интересует не этот вариант. вернее этот вариант не интересен.
Я не могу понять как здесь, в этой ситуации, можно задать например вектор скорости. Ведь должна же быть функция получения нулевой скорости. Как объяснить программе что проп валяется на земле и не двигается. Если удастся получить нулевую скорость то получить скорость движения будет совсем легко.

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



НО.
К сожалению далеко не у всех пропов есть возможность использования этого офсета m_vecVelocity именно из Prop_Send.
Почти у всех есть возможность получить из Prop_Data, но там этот офсет просто не работает. Вернее не получает данные.
Я уже просто начинаю думать по простецки - создам всем закомого пропа hegrenade_projectile, к нему все своё хозяйство приаттачу и все проблемы.
Но это же не есть решение моей проблемы.

ВО!!! BarD
Идея! А если попробовать приатачить гранату роботу, для получения текущих координат, для начальной точки лазера.
Вот этот вариант я еще не пробовал. Сейчас спать - завтра попробую обязательно.


Сообщение отредактировал tonline_kms65 - Среда, 01.06.2016, 16:46:15
 
TEIN Дата: Среда, 01.06.2016, 16:43:29 | Сообщение # 6
Сообщений: 551
Репутация: 73 [ +/- ]
В том то и дело я не могу сообразить как получить старые(old) координаты.

как вариант: запускаем таймер на одну секунду
1 секунда: new координаты
2 секунда: old = new, получаем снова координаты и записываем в new и т.д.
s = ((old[0]-new[0])^2 + ...)^1/2 - будет определять расстояние, тогда скорость будет являться расстоянием, ибо v = s/t, где t = 1 (таймер в 1 секунду)
соответственно, если s=0, то предмет стоит на месте

это общий случай
 
tonline_kms65 Дата: Среда, 01.06.2016, 16:54:48 | Сообщение # 7
Сообщений: 182
Репутация: 2 [ +/- ]
Цитата TEIN ()
таймер в 1 секунду


А в одну секунду это критично?
А если я вместо таймера буду использовать Updater (здесь OnGameFrame())?

Добавлено (01.06.2016, 16:54:48)
---------------------------------------------
Цитата TEIN ()

1 секунда: new координаты
2 секунда: old = new, получаем снова координаты и записываем в new и т.д.


Я тупею - а начальные old координаты тогда какие? По умолчанию = 0.00 ?

old = 0.00
1 секунда: new координаты
2 секунда: old = new, получаем снова координаты и записываем в new и т.д.

?

ЕПРСТ
начальные old это же координаты которые при создании пропа.


Сообщение отредактировал tonline_kms65 - Среда, 01.06.2016, 16:56:39
 
TEIN Дата: Среда, 01.06.2016, 16:55:31 | Сообщение # 8
Сообщений: 551
Репутация: 73 [ +/- ]
OnGameFrame() слишком часто вызывается, запринти его и увидишь
 
TEIN Дата: Среда, 01.06.2016, 17:10:22 | Сообщение # 9
Сообщений: 551
Репутация: 73 [ +/- ]
если хочешь точнее, то в плане оптимизации будет лучше использовать createtimer(0.1, ...) чем ongameframe, ибо последний при 66 тике вызывается 66 раз за секунду в отличие от первого, который вызывается 10 раз за секунду, 0.1 интервала будет достаточно. тогда при подсчете скорости учитывай, что у тебя не 1 секунда интервал, а 0.1 (или сразу: v=s/t=s/0.1=10s)
 
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Как получить скорость энтитьки лежащей на земле?
Страница 1 из 11
Поиск: