我正在尝试检测当前精灵节点的左侧或右侧是否有精灵节点。
这似乎很简单,但我看到了一种奇怪的行为。
我创建了一个瘦矩形(宽度= 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的位置了。它显然显示了“阻止”的几个点,显然没有触及它!
有什么想法可以在这里发生什么?
谢谢, 克里斯
答案 0 :(得分:0)
bodyInRect需要场景坐标。您在block.parent的坐标空间中提供坐标。除非block.parent是场景本身,否则您需要使用:
转换原点CGRect blockFrame = block.frame;
blockFrame.origin = [self convertPoint:blockFrame.origin toNode:self.scene];
此外,块的宽度必须小于10,否则你的-10偏移量不足以将帧移动到块的帧之外。