1

(0,0) と (0,1) にそれぞれ 2 つの円があるとします。

それらの間に SKPhysicsJoint があり、うまく機能しています。実行時に 2 の距離でそれらを分離したいと考えています。つまり、物理がゲーム内で動作している間です。どうすればこれを達成できますか?

アンカー ポイントを (0,0) と (0,2) に設定しようとしましたが、ジョイントには何の影響もありませんが、何かバグがあります。

まるでバネの長さが伸びたかのように、円がスムーズに押し合います。

円を 2 の距離に「テレポート」してからスプリングをそれに固定すると、すべてが機能しますが、物理オブジェクトをテレポートさせると、ご想像のとおり他のバグが発生します。

4

1 に答える 1

0

ジョイントを追加する前に、2 番目のオブジェクトを目的の位置に「テレポート」し、次にジョイントを追加してから元の位置に「テレポート」しました。

コード部分は次のとおりです。

SKSpriteNode* node1 = [_bodies objectAtIndex:loop];
     SKSpriteNode* node2 = [_bodies objectAtIndex:loop-1];
     CGPoint prev1 = node1.position;
     CGPoint prev2 = node2.position;
     node1.position = [((NSValue*)[positions objectAtIndex:loop]) CGPointValue];
     node2.position = [((NSValue*)[positions objectAtIndex:loop-1]) CGPointValue];
     [self AttachPoint:node1  secondPoint:node2 pos1:node1.position pos2:node2.posiiton] ;
     node1.position = prev1;
     node2.position = prev2;

そのまま動作していますが、これがどれほど効率的かはわかりません。SKPhysicsJointSpring に、時間の経過とともに変更できる「長さ」パラメーターがあればいいのにと思います。

于 2015-05-12T13:29:28.823 に答える