3

これは Apple による大きな見落としのようですが、SKPhysicsJoints はシーン座標にアンカー ポイントが設定されているため、あらゆる種類のスクロール ゲームを実行できなくなります。

SpriteKit でカメラをシミュレートするには、すべてのゲームプレイ要素を含む WorldNode を作成し、それをシーン内でパンします。残念ながら、これを行うと、ゲーム内のすべてのオブジェクトのシーン座標が、ワールドをパンするたびにフレームごとに変更されます。これにより、ジョイントのアンカー ポイントが壊れ、事態は悪化します。

ジョイントのアンカー ポイントを変更する方法さえないので、フレームごとに座標を更新する方法さえありません。スクロール ゲームで SKPhysicsJoint を使用することは選択肢ではないようです。

誰もこれを回避する方法を知っていますか?

4

1 に答える 1

3

わかりました、何が起こっているのか理解できたと思います。最初の仮定は完全に間違っていました。アンカー ポイントが正しくないように見える理由は、[convertPoint toNode] 呼び出しが正しくないシーン座標を返していたためです。数時間後、画面のサイズがちょうど半分ずれていることに気付きました。私のシーンには (0.5, 0.5) の anchorPoint がありますが、これにより変換値が台無しになります。したがって、ポイントを幅/2、高さ/2だけオフセットすると、正しいです:

GPoint pt = CGPointMake(anchorWorldX, anchorWorldY);
pt = [gGameScene convertPoint:pt fromNode:gGameWorld]; // convert to scene coords, but it's WRONG

pt.x += scene.size.width * scene.anchorPoint.x;   // this properly adjusts the value to be correct
pt.y += scene.size.height * scene.anchorPoint.y;

SKPhysicsJointPin* pin =[SKPhysicsJointPin jointWithBodyA:hinge.physicsBody bodyB:door.physicsBody anchor:pt];
于 2014-07-09T23:13:18.967 に答える