我正在创建一个游戏,将需要使用大量的碰撞检测,我只是学习它今天。
现在我有两个SKSpriteNodes,但其中一个是SKNode的子代。没有父级的SKSpriteNode称为character,带有父级的精灵称为buildingStructure。
现在character的分类是static const uint32_t playerCategory = 0x1 << 20;,buildingStructure的分类是_buildingStructureCategory = 0x1 << 0;,buildingStructure的分类是通过@property设置在另一类map.m中的。
变量正确传递给另一个名为main.m的类(character类别是在这里设置的)。我用一种方法创建character,设置他的物理身体、位置等等。
character__'s性质
character.name = @"character";
character.size = CGSizeMake(250, 400);
character.zPosition = 500;
character.position = CGPointMake(self.scene.size.width/2, self.scene.size.height/2+200);
character.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:character.size];
character.physicsBody.restitution = 0;
character.physicsBody.density = 0.1;
character.physicsBody.allowsRotation = NO;
character.physicsBody.categoryBitMask = playerCategory;
character.physicsBody.collisionBitMask = categoryBitManager.buildingStructureCategory;buildingStructure__'s性质
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;另一方面,buildingStructure没有一个集合physicsBody,因为我希望character通过buildingStructure,但我也希望它能够检测character何时“在buildingStructure的顶部”执行一个操作。
由于buildingStructure没有定义的physicsBody,这是什么导致didBeginContact:contact不识别碰撞接触?
发布于 2014-05-06 01:45:15
默认情况下,physicsBody属性的SKNode (或子类)是nil。是的,给buildingStructure一个物理主体,并正确地配置它以实现所期望的行为。
要想在两个物理体之间得到想要的行为,首先要理解存在‘冲突’和'contacts'。SKPhysicsBody有两个名为collisionBitMask和contactTestBitMask.的属性
对于collisionBitMask,默认值是0xFFFFFFF(所有位集),对于contactTestBitMask,默认值是0x00000000 (所有位被清除)。你可以看到,在默认情况下,每一个物理物体都会与他人发生碰撞,但不会有任何接触。
碰撞是你想要物理模拟影响身体的地方,在那里,接触是你想要被通知的地方,这样你就可以做一些事情。所以这会叫didBeginContact:
我建议将两个物体的collisionBitMask设置为0(因此它们的物理不受影响并相互传递)。然后将字符的contactTestBitMask属性设置为像这样的建筑物的属性-
character.physicsBody.contactTestBitMask = categoryBitManager.buildingStructureCategory;https://stackoverflow.com/questions/23484406
复制相似问题