Вытягивание конечностей в box2d

Я использую Box2d (libgdx) для реализации велосипеда BMX с его гонщиком. Велосипед — это одно тело, и каждая конечность гонщика — это одно тело. Находясь в воздухе во время прыжка, игрок должен иметь возможность управлять не гонщиком, а байком. Поскольку гонщик соединен с велосипедом рулем и педалями, конечности будут следовать за велосипедом до тех пор, пока руки/ноги не будут полностью вытянуты, после чего движение велосипеда будет ограничено.

Может ли кто-нибудь предложить хороший способ использования суставов (вероятно) для достижения этой цели? И велосипед, и гонщик должны находиться под действием силы тяжести, но тело гонщика не должно разрушаться под действием силы тяжести. Это нормально, когда конечности неподвижны и не подвержены влиянию гравитации (то есть их внутреннее положение), но велосипед должен влиять на конечности. Предпочтительно, чтобы было затронуто внутреннее положение конечностей гонщика, например, когда велосипед тяжело приземляется на землю, но это второстепенный приоритет.

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


person Magnus K    schedule 26.09.2012    source источник


Ответы (1)


Если конечности следуют за велосипедом, как руки/ноги могут полностью вытянуться?

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

Затем вы можете определить целевой угол для каждого сустава в положении покоя и каждый раз использовать двигатель сустава, чтобы заставить сустав двигаться в положение покоя. Если вы сделаете эти сочлененные моторы достаточно сильными, чтобы удерживать всадника в вертикальном положении, но не слишком сильнее, то на него должно повлиять тяжелое приземление.

person iforce2d    schedule 27.09.2012
comment
Спасибо. Я был недостаточно точен. Целые конечности не следуют за велосипедом. Только руки и ноги следуют точному движению педали руля. В реальной жизни гонщик вытягивал бы руки/ноги, чтобы двигать байк относительно своего тела. В игре я бы предпочел наоборот (велосипедные движения, растяжка рук/ног) из практических соображений контроля над игрой. - person Magnus K; 30.09.2012
comment
Что касается вашего предложения по двигателю, просто для ясности, я думаю, вы имеете в виду, что двигатели должны использоваться только для устойчивости, а не для достижения цели, когда руки / ноги должны следовать за велосипедом. Что вы имеете в виду под положением покоя? Например, сохраненный предыдущий угол сустава, который мы хотим сохранить, компенсируя последствия падения всадника под собственным весом? Звучит многообещающе, но как я могу помешать этому компенсирующему эффекту нейтрализовать силы от велосипеда, тянущего руки/ноги? - person Magnus K; 30.09.2012
comment
Точно, сохраненный предыдущий угол сустава, например, идеальный/естественный/угол покоя между плечом и предплечьем может быть, скажем, 140 градусов. Поскольку всадника толкают вокруг, угол между сегментами конечностей может стать 120 градусов, поэтому скорость двигателя должна быть положительной и т. д. Вы можете увидеть пример этого здесь youtube.com/watch?v=rbUBAr7S_Wk (в видео я просто переключаюсь между несколькими сохраненными конфигурациями углов соединения) Чтобы убедиться, что велосипед тянет игрока в положение, а не наоборот, вам нужно сделать велосипед значительно тяжелее, чем гонщик. - person iforce2d; 30.09.2012