Ios SKPhysicsWorld bodyWithTexture不适用于复杂形状

Ios SKPhysicsWorld bodyWithTexture不适用于复杂形状,ios,objective-c,xcode,sprite-kit,skphysicsbody,Ios,Objective C,Xcode,Sprite Kit,Skphysicsbody,我是唯一一个对SKPhysicsBody的新bodyWithTexture功能有问题的人吗 我是iOS开发的新手,也许是我,但我正在尝试创建一个需要检测球是否在路径内的游戏 我从图像动态加载(随着级别的提高,路径越来越复杂),我将物理体设置为球(bodyWithCircle)和动态路径(路径的PNG文件),其余都是透明背景。我正在使用新的bodyWithTexture功能(是的,我知道它仅在iOS 8下受支持),分配位掩码后,我定义了球和路径之间的接触,并通过开始/结束接触得到通知 SKSpri

我是唯一一个对SKPhysicsBody的新bodyWithTexture功能有问题的人吗

我是iOS开发的新手,也许是我,但我正在尝试创建一个需要检测球是否在路径内的游戏

我从图像动态加载(随着级别的提高,路径越来越复杂),我将物理体设置为球(bodyWithCircle)和动态路径(路径的PNG文件),其余都是透明背景。我正在使用新的bodyWithTexture功能(是的,我知道它仅在iOS 8下受支持),分配位掩码后,我定义了球和路径之间的接触,并通过开始/结束接触得到通知

SKSpriteNode *lvlPath = [SKSpriteNode spriteNodeWithImageNamed:currentLevel.imagePath];
lvlPath.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

lvlPath.physicsBody = [SKPhysicsBody bodyWithTexture:lvlPath.texture size:lvlPath.frame.size];
现在对于像直线这样的简单路径,它非常有效。一旦涉及到复杂的路径,这种机制就会变得疯狂,至少在我的simluator(运行iOS 8)中是如此

我创建了另一个简单的应用程序来检查这个问题,发现当路径是一个复杂的形状时,它会变得疯狂。当球以一个方向进入路径时,它似乎在工作(开始/结束接触),但当球仍在路径内时,它会报告已结束接触,然后像随机翻转开始/结束接触一样,向相反方向移动会突然表现出奇怪的行为

SKSpriteNode *lvlPath = [SKSpriteNode spriteNodeWithImageNamed:currentLevel.imagePath];
lvlPath.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

lvlPath.physicsBody = [SKPhysicsBody bodyWithTexture:lvlPath.texture size:lvlPath.frame.size];
救命啊。。。由于级别是动态加载的,这对我来说是一个非常酷的功能,将所有级别的定义保存为CGPathRef,并为每个级别(可能还有设备)创建一个多边形

谢谢大家, 埃亚尔

编辑 示例屏幕截图:

在本例中,带箭头的球使用bodyWithCircle初始化,C形对象使用bodyWithTexture初始化。我正在调试打印“didBeginContact”和“didEndContact”,它在上面一行出现了异常,你可以看到它与“didEndContact”在一起,而这两个对象肯定是在接触。如果我摇动它(我用光标移动它),它会突然翻转到“didBeginContact”。
对于更简单的对象(如带圆角的水平/垂直线),它可以完美地工作。

这听起来很像形状自相交时发生的情况。你能发布形状的屏幕截图和形状的drawsPhysics调试显示吗?嗨,LearnCos2D,谢谢你的快速回复。我添加了一个带有说明的屏幕截图链接;转到视图控制器以查看场景中物理实体的轮廓。你可能会看到为什么它没有按预期工作。哇,非常感谢,我不知道这个属性存在!!我现在明白了,这是一个凹形和凸形的问题。。。我复杂的形状产生了大于180度的角度。我想可能就是这样。感谢你的评论,我可以清楚地看到这些台词。。。我会尝试分割形状,一旦解决了这个问题,我会发布一个指南或其他东西。