Я создаю игру, которая должна будет использовать много обнаружения столкновений, и я только узнаю об этом сегодня.
Теперь у меня есть два SKSpriteNodes
, но один является дочерним элементом SKNode
. SKSpriteNode
без родителя называется character
, а спрайт с родителем называется 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
для выполнения действия.
Поскольку buildingStructure
не имеет определенного physicsBody
, это то, что заставляет didBeginContact:contact
не распознавать контакт столкновения?