Я делаю относительно простую игру, состоящую из игрока, препятствий и монет. Моя цель - иметь столкновения только между препятствиями и игроком, а также чтобы контакт между игроком и монетой вызывал didBeginContact
.
Вот код:
//declare categoryBitMasks
struct physicsCategories {
static let playerCategory : UInt32 = 1
static let coinCategory: UInt32 = 2
static let obstacleCategory : UInt32 = 3
}
//assign physics categories
playerNode!.physicsBody?.categoryBitMask = physicsCategories.playerCategory
playerNode!.physicsBody?.collisionBitMask = physicsCategories.obstacleCategory
playerNode!.physicsBody?.contactTestBitMask = physicsCategories.coinCategory
obstacleNode.physicsBody?.categoryBitMask = physicsCategories.obstacleCategory
obstacleNode.physicsBody?.collisionBitMask = physicsCategories.playerCategory
obstacleNode.physicsBody?.contactTestBitMask = 0
coinNode.physicsBody?.categoryBitMask = physicsCategories.coinCategory
coinNode.physicsBody?.collisionBitMask = 0
coinNode.physicsBody?.contactTestBitMask = physicsCategories.playerCategory
Функция didBeginContact
удаляет монету из представления и добавляет ее в банк валют пользователя. Эта функция вызывается, когда игрок ударяет по монете, но столкновение происходит до того, как монета удаляется. Столкновение очень мешает игровому процессу, и я не смог найти работающее решение. Какие-либо предложения?