在SpriteKit中,两个spritenode没有正确触发接触事件

时间:2016-02-18 23:46:55

标签: sprite-kit collision contact skspritenode

我有两个SKSpriteNode-s(让他们称之为SKSPriteNode A和SKSpriteNode B),A是我的英雄精灵,B是一个场景元素,有时,didBeginContact会在碰撞时触发,有时它不会#39;吨。 A具有基于纹理的physicsBody设置,B具有基于矩形的physicsBody设置。我可以看到他们的纹理碰撞和交叉,但我没有看到在didBeginContact中关闭NSLog。这并不是完全一致的,因为他们碰撞的另一次和接触事件发射得很好。我自然需要这一点。有人对这个问题有什么建议吗?这个场景是physicsWorld唯一的联系委托,因此只有场景可以触发并进入事件处理程序,所以我知道它正在工作 - 至少在某些时候。场景中的代码:

-(void)didBeginContact:(SKPhysicsContact *)contact {
    NSLog(@"Contact happened!!!!!! :) ");
}

我设置了自定义类StaticLevelElement,因此它扩展了SKSpriteNode:

@interface StaticLevelElement : SKSpriteNode

B已设置为StaticLevelElement,带有三角形图像:

StaticLevelElement * B = [StaticLevelElement spriteNodeWithImageNamed:@"triangle"];

我试图将B&B的物理实体设置为基于纹理的物理实体:

B.physicsBody = [SKPhysicsBody bodyWithTexture:[SKTexture textureWithImageNamed:@"triangle"] size:B.size];

我也有同样的结果 - 间歇性接触,偶尔发射,并不是真的一致。如果我将B设置为基于矩形的physicsBody:

,也会发生同样的情况
B.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:B.size];

1 个答案:

答案 0 :(得分:0)

这是我的意见,我可以说,中等程度的确定性,anchorPoint引起了这一点。我把它设置为(0.5,0),这似乎导致了这个问题,显然,移动整个物理体,我根本不喜欢。一旦我删除了这个anchorPoint的手动设置(并因此将其返回到(0.5,0.5)),联系人看起来或多或少地正常发生。仍然不完美 - 每次重叠都不会触发,但我认为好多了。正如我所说,我仍然不完全清楚何时发生接触以及anchorPoint如何影响它,但看起来就是这样。