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;

然后我测试看看那个矩形(adjacentFrame)是否与一个节点相交:

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

现在,奇怪的是,obstructingBody 本身就包含了“block”!

我什至添加了代码以将 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 回答