Мы пытаемся создать коллизию между игроком, физическое тело которого (CategoryBitMask, CollisionBitMask, ContactTestBitMask) было запрограммировано в файле swift, и противником, который был помещен в редактор сцены, и его физическим телом (CategoryBitMask = 2, CollisionBitMask = 4294967295 'по умолчанию', ContactBitMask = 1). Код, показанный ниже, показывает, что было протестировано, но не привело к столкновениям.
import SpriteKit
import GameplayKit
class ClassicLevelScene: SKScene, SKPhysicsContactDelegate {
// Physics Bodies Setup
let enemy:UInt32 = 2
// Player Constant
let player = SKSpriteNode(imageNamed: "car1")
override func didMove(to view: SKView) {
// Physics World
physicsWorld.contactDelegate = self
// Set up player
player.position = CGPoint(x: 30, y: -245)
player.zPosition = Layers.cars
player.size = CGSize(width: 60, height: 80)
player.name = "player"
player.physicsBody = SKPhysicsBody(texture: player.texture!, size: CGSize(width: player.size.width, height: player.size.height))
player.physicsBody?.allowsRotation = false
player.physicsBody?.categoryBitMask = 1
player.physicsBody?.collisionBitMask = 7
player.physicsBody?.contactTestBitMask = 1
addChild(player)
}
func didBegin(_ contact: SKPhysicsContact) {
/* Player touches anything, game over */
let contactA:SKPhysicsBody = contact.bodyB
let contactB:SKPhysicsBody = contact.bodyB
if contactA.categoryBitMask == 2 || contactB.categoryBitMask == 2 {
// execute code to respond to object hitting ground
minusHeart()
spikeSparkExplosion()
}
}