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有两个属性,分别名为collisionBitMask和contactTestBitMask
对于冲突位掩码而言,默认值为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;