SpriteKit:检测完整的节点重叠

man*_*an1 3 ios sprite-kit skphysicsbody sknode

我有两个SKShapeNodes - 一个带有基于边缘的SKPhysicsBody,一个基于音量 - 我想要检测它们的交叉点而不会发生碰撞.我有这个工作正常,SKPhysicsContactDelegate接触方法被调用,因为一个经过另一个,但我的问题是didEndContact不再相交时被调用,即使一个主体完全包含在另一个主体内.确定真实接触或重叠的最佳方法是什么,而不仅仅是边缘交叉?我试过了usesPreciseCollisionDetection,但没有用.

mei*_*man 7

CGPoint locObj1 = [sprite1 locationInNode:self];
CGPoint locObj2 = [sprite2 locationInNode:self];

if([sprite1 containsPoint: locObj2]) return;
if([sprite2 containsPoint: locObj1]) return;
Run Code Online (Sandbox Code Playgroud)

将其添加到didBeginContact和didEndContact的开头.这将检查其中一个节点是否包含另一个节点.如果确实如此,那么它什么都不会减轻你的问题,因为你可以减少你的doBeginContact和didEndContact的问题.我不在我的Mac上,所以你可能需要稍微使用语法.希望这能让你朝着正确的方向前进.

  • 你所处理的非常有趣的困境.我将继续寻找解决方案,因为我不相信SpriteKit应该/将会受到限制.我认为spriteKit社区应该对这篇文章更感兴趣,并且可能会有人通过......一个自定义containsPoint来满足你的凸形要求. (2认同)