gpt4 book ai didi

ios - Sprite Kit中的碰撞检测未检测到碰撞

转载 作者:行者123 更新时间:2023-12-01 18:59:58 24 4
gpt4 key购买 nike

我正在创建一个需要使用大量碰撞检测的游戏,而我今天才了解它。

现在我有两个 SKSpriteNodes但一个是 SKNode 的 child . SKSpriteNode没有 parent 被称为 character和父 Sprite 被称为 buildingStructure .

现在character的类别是 static const uint32_t playerCategory = 0x1 << 20;buildingStructure的类别是 _buildingStructureCategory = 0x1 << 0; . buildingStructure的类别设置在另一个类中 map.m通过 @property .

变量正确地传递给另一个名为 main.m 的类。 (这是设置 character 类别的位置)。我创建 character用一个方法,设置他的物理体,位置等等。

character的属性

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的属性
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 的“顶部”执行一个 Action 。

由于 buildingStructure没有定义的 physicsBody这是导致 didBeginContact:contact的原因吗?不认识碰撞接触?

最佳答案

物理体 的属性(property)SK节点 (或其子类)是 默认情况下。是的,给 buildingStructure 一个物理体并正确配置它以实现所需的行为。

要在两个物理体之间获得所需的行为,首先要了解有 '碰撞' 还有 '联系人' . SKPhysicsBody 有两个名为 的属性碰撞位掩码 联系TestBitMask .

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

碰撞是您希望物理模拟影响相关 body 的地方,而联系人是您希望收到通知以便您可以做某事的地方。所以这将调用 开始联系:

我建议设置 碰撞位掩码 将两个物体都设为 0(因此它们的物理特性不会受到影响并相互通过)。然后设置联系TestBitMask 像这样的建筑物的特性属性-

character.physicsBody.contactTestBitMask = categoryBitManager.buildingStructureCategory;

关于ios - Sprite Kit中的碰撞检测未检测到碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23484406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com