Sprite kit SpriteKit bodyInRect查找节点时,它不应';T

Sprite kit SpriteKit bodyInRect查找节点时,它不应';T,sprite-kit,skphysicsbody,Sprite Kit,Skphysicsbody,我试图检测当前精灵节点的左侧或右侧是否有精灵节点 这似乎很简单,但我看到了一种奇怪的行为 我创建了一个与当前节点高度相同、原点与当前节点相同的精简矩形(宽度=1点) e、 g: 然后,我测试该rect(邻接帧)是否与节点相交: SKPhysicsBody* obstructingBody; obstructingBody = [self.physicsWorld bodyInRect:adjacentFrame]; 现在,奇怪的是,障碍物本身就含有“障碍物” 我甚至还添加了代码,在场景中添加了

我试图检测当前精灵节点的左侧或右侧是否有精灵节点

这似乎很简单,但我看到了一种奇怪的行为

我创建了一个与当前节点高度相同、原点与当前节点相同的精简矩形(宽度=1点)

e、 g:

然后,我测试该rect(邻接帧)是否与节点相交:

SKPhysicsBody* obstructingBody;
obstructingBody = [self.physicsWorld bodyInRect:adjacentFrame];
现在,奇怪的是,障碍物本身就含有“障碍物”

我甚至还添加了代码,在场景中添加了一个带有相邻帧的SpriteNode,以便检查rect的位置。它清楚地显示了“块”左侧的几个点,并且明显没有触摸到它

你知道这里会发生什么吗

谢谢,
Chris

bodyInRect需要场景坐标。您可以在block.parent的坐标空间中提供坐标。除非block.parent是场景本身,否则需要使用以下方法转换原点:

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

此外,块的宽度必须小于10,否则-10偏移量不足以将帧移出块的帧。

谢谢您的回答!父对象实际上就是场景本身,所以看起来没问题。为了测试,我在调用bodyInRect时使用的rect中添加了一个精灵到场景中,这样我就可以直观地看到正在测试的区域。测试精灵在屏幕上画的位置超出了“block”的位置,所以我不明白为什么它会返回“block”本身。。。
CGRect blockFrame = block.frame;
blockFrame.origin = [self convertPoint:blockFrame.origin toNode:self.scene];