不应该在SpriteKit bodyInRect查找节点的时候

时间:2013-10-28 23:06:14

标签: sprite-kit skphysicsbody

我正在尝试检测当前精灵节点的左侧或右侧是否有精灵节点。

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

我创建了一个瘦矩形(宽度= 1磅),它与当前节点的高度相同,并且与当前节点的原点相同。

e.g:

// 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包含'block'本身!

我甚至添加了一个代码,用于将一个SpriteNode添加到具有相邻帧框架的场景中,这样我就可以检查rect的位置了。它显然显示了“阻止”的几个点,显然没有触及它!

有什么想法可以在这里发生什么?

谢谢, 克里斯

1 个答案:

答案 0 :(得分:0)

bodyInRect需要场景坐标。您在block.parent的坐标空间中提供坐标。除非block.parent是场景本身,否则您需要使用:

转换原点
CGRect blockFrame = block.frame;
blockFrame.origin = [self convertPoint:blockFrame.origin toNode:self.scene];

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