О транспортном средстве

Список разделов Геймдев в Blender Игровой движок Blender

Описание: Все вопросы и обсуждения, касающиеся BGE
Модераторы: exooman, denis8424

Сообщение #1 Август » 29.01.2019, 15:24

Всем привет. Ребята, может кто сталкивался с проблемой определения скорости транспортного средства в данный момент времени. Только не локальный вектор скорости, а реально означающий скорость транспортного средства, через который можно получить скорость в данный момент и изменить эту скорость в большую или меньшую сторону.
На вкладке физика можно установить значение минимальной и максимальной скорости. Значения практически постоянны. А как изменить эти ограничения в процессе движения авто, предположим, по каким-то обстоятельствам? Вот например, едет авто по шоссе и съезжает на песок или распаханную землю. По шоссе 180 вполне реально, но по пашне...
Август M
Сообщения: 163

Сообщение #2 Август » 31.01.2019, 22:10

Вопрос оказался трудным или неинтересным.
Тогда иначе спрошу. На вкладке физика можно установить значение минимальной и максимальной скорости. Кто-нибудь знает, как можно это сделать через скрипт (Питон)?
Август M
Сообщения: 163

Сообщение #3 exooman » 31.01.2019, 22:37

игровой движок не понимает таких вещей как "скорость". Ты можешь лишь указать где будет объект в следующем кадре, манипулируя его позицией путем актуаторов движения.

То есть, активируя актуатор "переместиться по оси Х на 10 пунктов", для самого движка ты не перемещаешь объект со скоростью 10, ты лишь указываешь, что каждый кадр к координате этого объекта будет прибавлено значение 10 для оси Х.

То же самое и в случае с физикой. Ты не указываешь скорость, ты лишь задаешь значение силы, которое будет применяться к объекту каждый кадр, а физический движок уже будет просчитывать как и на какое расстояние переместить объект в следующем кадре. Причем, там роль играют так же настройки физики и трения.

Поэтому скорость ты можешь только узнавать. Задать скорость нельзя, её просто нет для движка как таковой - он понимает либо ввод координат, либо ввод импульса для последующего просчета физическим движком. Определить момент, когда импульс нужно уменьшить (исходя из необходимого лимита скорости), тебе нужно самому. В случае со сменой грунтов, тебе нужно будет даже притормаживать объект, так как уменьшения импульса может оказаться недостаточно(смотря какие настройки трения были применены) - объект просто продолжить перемещаться с прежней скоростью по инерции.
exooman M
Аватара
Сообщения: 1568


Сообщение #4 Bibo » 01.02.2019, 13:05

Август писал(а):Кто-нибудь знает, как можно это сделать через скрипт (Питон)?
linVelocityMin
linVelocityMax
Bibo
Аватара
Сообщения: 540

Сообщение #5 exooman » 01.02.2019, 16:25

exooman писал(а):Поэтому скорость ты можешь только узнавать. Задать скорость нельзя

ну или можно)))
exooman M
Аватара
Сообщения: 1568


Сообщение #6 Август » 01.02.2019, 20:16

Bibo писал(а):Август писал(а):
Кто-нибудь знает, как можно это сделать через скрипт (Питон)?
linVelocityMin
linVelocityMax
Bibo, подскажите пожалуйста как будет выглядеть строка в callback назначения максимальной скорости, если я строкой:
bge.logic.getCurrentScene().objects['Trassa.I'].collisionCallbacks.append(callback)
определяю необходимый грунт под колёсами? Ну допустим максимальная скорость должна быть не более 10 метров.
Я с Python плохо знаком, в основном плагиатом пользуюсь.
Август M
Сообщения: 163

Сообщение #7 Bibo » 01.02.2019, 21:36

Август писал(а):Bibo, подскажите пожалуйста как будет выглядеть строка в callback назначения максимальной скорости, если я строкой:
bge.logic.getCurrentScene().objects['Trassa.I'].collisionCallbacks.append(callback)
определяю необходимый грунт под колёсами? Ну допустим максимальная скорость должна быть не более 10 метров.
Если я правильно понял, то существует некоторая функция с именем callback которая привязана к физике участка трассы на котором требуется установка максимальной скорости
Код: Выделить всё
def callback(obj):
    obj.linVelocityMax(10)
если 10 блендеровских едениц считается 10ю метрами.
Bibo
Аватара
Сообщения: 540

Сообщение #8 Август » 02.02.2019, 09:05

Bibo писал(а):Если я правильно понял, то существует некоторая функция с именем callback которая привязана к физике участка трассы на котором требуется установка максимальной скорости
КОД: ВЫДЕЛИТЬ ВСЁ
def callback(obj):
    obj.linVelocityMax(10)
если 10 блендеровских едениц считается 10ю метрами.
Вы совершенно правильно поняли, трасса по шоссе, по бездорожью идёт.
Спасибо Bibo, дальше уж я сам.

Извиняюсь, но гоп сказал я не перепрыгнув. Строку:
if car["GasRev"] == False : # если авто движется вперёд
car.linVelocityMax(41)
Python ругает так: TypeError: 'float' object is not callable
Вроде как ругает за целочисленное значение. Добавил десятичное значение, а он всё ту же ошибку пишет. В чём я не прав?
Август M
Сообщения: 163

Сообщение #9 Bibo » 02.02.2019, 11:24

Август писал(а):Вроде как ругает за целочисленное значение. Добавил десятичное значение, а он всё ту же ошибку пишет. В чём я не прав?
Пардон, мой косяк, это же не функция, это же переменная, правильно будет так
Код: Выделить всё
def callback(obj):
    obj.linVelocityMax = 10
Bibo
Аватара
Сообщения: 540

Сообщение #10 Август » 02.02.2019, 12:33

Bibo писал(а):Пардон, мой косяк, это же не функция, это же переменная, правильно будет так
КОД: ВЫДЕЛИТЬ ВСЁ
def callback(obj):
    obj.linVelocityMax = 10
Ура-а, заработало. Спасибо за помощь, Bibo, удачи вам.
Август M
Сообщения: 163


Вернуться в Игровой движок Blender

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость