Я работаю над контактами/столкновениями в своей новой игре. Я просто закодировал это, и он работает неправильно. Вот мой код:Почему мой столкновение/контакт не работает в Swift?
Square Детали:
square.position = CGPointMake(self.size.width/2, self.size.height/1.5)
square.zPosition = 35
square.size = CGSize(width: 40, height: 40)
square.physicsBody = SKPhysicsBody(rectangleOfSize: square.size)
square.physicsBody?.affectedByGravity = false
square.physicsBody?.categoryBitMask = squareGroup
square.physicsBody?.collisionBitMask = obstacleGroup
square.physicsBody?.contactTestBitMask = obstacleGroup
self.addChild(square)
Препятствие Детали (Препятствие 1 и 2 одинаковы):
obstacle1.physicsBody = SKPhysicsBody(rectangleOfSize: obstacle1.size)
obstacle1.physicsBody?.affectedByGravity = false
obstacle1.physicsBody?.dynamic = true
obstacle1.physicsBody?.mass = 10000
obstacle1.physicsBody?.categoryBitMask = obstacleGroup
obstacle1.physicsBody?.collisionBitMask = squareGroup
obstacle1.physicsBody?.contactTestBitMask = squareGroup
Вот мой код для контактов между ними и группами категории :
var squareGroup : UInt32 = 0x1 << 0
var obstacleGroup : UInt32 = 0x1 << 1
func didBeginContact(contact: SKPhysicsContact) {
var firstBody = SKPhysicsBody()
var secondBody = SKPhysicsBody()
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
}
else {
firstBody = contact.bodyB
firstBody = contact.bodyA
}
if firstBody.categoryBitMask == 1 && secondBody.categoryBitMask == 2{
let newScene = GameScene(size: self.size)
_ = SKTransition.fadeWithDuration(1)
self.view?.presentScene(newScene)
}
}
Если бы кто-нибудь мог мне помочь, это было бы здорово. Задавайте вопросы в комментариях.
Это еще Безразлично Не работай. –
@JoshSchlabach Вы можете быть более конкретным? Что значит «не работает»? Вы проверили, действительно ли был вызванBeginContact? Правильно ли вы установили контакт делегата? – Whirlwind
Площадь будет проходить через препятствия и ничего не делать. Вызывается Didbegincontact, и поэтому делегат контакта –