1

いくつかのジョイント(ホイールジョイント、プリズムジョイント、回転ジョイント)が取り付けられたボディのグループがあります

メソッドsetTransformを使用して、その体のグループを位置に移動しようとしています

1 つの体だけをその位置に移動することにし、他の体は関節のために従う必要があります。

奇妙な結果が得られます。体が転がり始め、どこにも移動しません。本当に奇妙な結果です。説明する画像を次に示します。

ここに画像の説明を入力

setTransform を使用して、ジョイントで取り付けられた複数のボディをある位置に移動する方法は?

注 : 点 A から点 B (移動) まで、オブジェクトを介して障害物はありません。

4

1 に答える 1

1

box2d setTransform() 参照から:

ボディの原点と回転の位置を設定します。これにより、すべての連絡先が切断され、他のボディが目覚めます。ボディのトランスフォームを操作すると、非物理的な動作が発生する場合があります。

問題は体を動かすために使用しようとしているメカニズムにあり、setTransform は正しい方法ではないと思います。

これの代わりに使用することを検討してください

void com.badlogic.gdx.physics.box2d.Body.setLinearVelocity(Vector2 v)

体の終点と始点の減算としてvを計算できます。物体がターゲットに到達するときに、(速度をゼロにすることによって) 物体を停止させる必要があります。

setLinearVelocityは重力に依存しないことに注意してください


2 番目の解決策は、この「ジョイント グループ」内のすべてのボディに Transform を設定することです。開始位置とターゲット ベクトルに応じて、ボディを反復処理して移動できます。

for(Body body : jointGroup)
{
    body.setTransform(body.getPosition.x - someX, ...)
    ...
于 2015-09-01T13:44:48.260 に答える