В настоящее время я работаю над имитацией Super Mario на iOS, используя полностью SpriteKit. В этой игре я создал стену, состоящую из разных блоков, по какой-то причине игрок может стоять между этими блоками, даже если буквально нет места, на котором можно стоять. (см. изображение ниже)
playerSprite использует точное обнаружение столкновений и имеет физическое тело прямоугольника.
Блоки не используют точное обнаружение столкновений и представляют собой идеальный квадрат.
Снимок экрана
Вот код, касающийся физического тела игрока:
func setupPhysics() {
self.physicsBody!.mass = 0.02275555580854416
self.physicsBody!.allowsRotation = false
self.physicsBody!.usesPreciseCollisionDetection = true
self.physicsBody!.categoryBitMask = CollisionTypes.player.rawValue
self.physicsBody!.collisionBitMask = CollisionTypes.brickBlock.rawValue | CollisionTypes.questionMarkBlock.rawValue | CollisionTypes.groundBlock.rawValue | CollisionTypes.solidBlock.rawValue | CollisionTypes.enemy.rawValue
self.physicsBody!.contactTestBitMask = CollisionTypes.brickBlock.rawValue | CollisionTypes.questionMarkBlock.rawValue | CollisionTypes.groundBlock.rawValue | CollisionTypes.solidBlock.rawValue | CollisionTypes.coin.rawValue | CollisionTypes.playerDetectionBlock.rawValue | CollisionTypes.enemy.rawValue
}
Вот код, касающийся блоков:
self.size = CGSize(width: 16, height: 16)
self.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 16))
self.physicsBody!.isDynamic = false
self.texture = SKTexture(imageNamed: "Solid Block")
self.texture!.filteringMode = .nearest
self.name = "SolidBlock"
self.position = position
self.physicsBody!.categoryBitMask = CollisionTypes.solidBlock.rawValue
self.physicsBody!.contactTestBitMask = CollisionTypes.player.rawValue
self.blendMode = .replace
Спасибо, что уже помогли мне!
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.