2

現在のスプライト ノードのすぐ左または右にスプライト ノードがあるかどうかを検出しようとしています。

これは簡単に思えますが、奇妙な動作が見られます。

現在のノードと同じ高さで、現在のノードと同じ原点を持つ細い四角形 (幅 = 1 ポイント) を作成しました。

例えば:

// Create a thin rect that's aligned to the left edge of 'block' 
CGRect adjacentFrame;
adjacentFrame = CGRectMake(block.frame.origin.x,
                           block.frame.origin.y,
                           1,
                           block.frame.size.height);

// Shift the rect left a few points to position it to the left of 'block'
adjacentFrame.origin.x -= 10;

次に、rect (adjacentFrame) がノードと交差しているかどうかをテストします。

SKPhysicsBody* obstructingBody;
obstructingBody = [self.physicsWorld bodyInRect:adjacentFrame];

さて、奇妙なことに、obstructingBody には「ブロック」自体が含まれています。

rect の位置を確認できるように、AdventureFrame のフレームを使用してシーンに SpriteNode を追加するコードも追加しました。「ブロック」の残りの数ポイントが明確に表示されており、明らかに触れていません!

ここで何が起こっているのでしょうか?

ありがとう、クリス

4

1 に答える 1

0

bodyInRect にはシーン座標が必要です。block.parent の座標空間で座標を指定します。block.parent がシーン自体でない限り、原点を次のように変換する必要があります。

CGRect blockFrame = block.frame;
blockFrame.origin = [self convertPoint:blockFrame.origin toNode:self.scene];

また、ブロックの幅は 10 未満でなければなりません。そうしないと、-10 のオフセットではフレームをブロックのフレームの外に移動するのに十分ではありません。

于 2013-10-29T00:32:52.187 に答える