Ios Sprite套件中的碰撞检测未检测到碰撞

Ios Sprite套件中的碰撞检测未检测到碰撞,ios,objective-c,sprite-kit,skphysicsworld,Ios,Objective C,Sprite Kit,Skphysicsworld,我正在制作一个需要大量碰撞检测的游戏,我今天才开始学习 现在我有两个skspritenode,但其中一个是SKNode的子节点。没有父对象的SKSpriteNode称为character,有父对象的精灵称为buildingStructure 现在character的类别是static const uint32\u t playerCategory=0x1默认情况下SKNode(或的子类)的physicsBody属性是nil。是,为建筑结构提供一个物理实体,并正确配置它以实现所需的行为 要获得两个

我正在制作一个需要大量碰撞检测的游戏,我今天才开始学习

现在我有两个
skspritenode
,但其中一个是
SKNode
的子节点。没有父对象的
SKSpriteNode
称为
character
,有父对象的精灵称为
buildingStructure


现在
character
的类别是
static const uint32\u t playerCategory=0x1默认情况下SKNode(或的子类)的physicsBody属性是nil。是,为建筑结构提供一个物理实体,并正确配置它以实现所需的行为

要获得两个物理体之间所需的行为,首先要了解存在“碰撞”“接触”SKPhysicsBody有两个属性,分别名为collisionBitMaskcontactTestBitMask

对于冲突位掩码而言,默认值为0xFFFFFF(所有位已设置),对于contactTestBitMask而言,默认值为0x00000000(所有位已清除)。您可以看到,默认情况下,每个物理体都会与其他物理体碰撞,但不会发生接触

碰撞是您希望物理模拟影响所讨论的身体的地方,接触是您希望得到通知以便您可以采取行动的地方。因此,这将调用didBeginContact:

我建议将两个实体的碰撞位掩码设置为0(这样它们的物理不会受到影响并相互传递)。然后将character的contactTestBitMask属性设置为建筑物的属性,如下所示-

character.physicsBody.contactTestBitMask = categoryBitManager.buildingStructureCategory;

我之前就知道了,谢谢。我还必须将
buildingStructure
collisionBitMask
设置为
0x0
,否则当
character
buildingStructure
发生冲突时
character
会推动
buildingStructure
buildingStructure.name = @"buildingStructure";
buildingStructure.position = CGPointMake(building.position.x, building.position.y);
buildingStructure.size = CGSizeMake(500, 400);
buildingStructure.physicsBody.dynamic = NO;

buildingStructure.physicsBody.categoryBitMask = _buildingStructureCategory;
character.physicsBody.contactTestBitMask = categoryBitManager.buildingStructureCategory;