struct PhysicsCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let planet : UInt32 = 0b1
static let rocket : UInt32 = 0b10 }
planet.physicsBody = SKPhysicsBody(circleOfRadius: planet.size.width/2)
planet.physicsBody?.dynamic = true planet.physicsBody?.categoryBitMask = PhysicsCategory.planet
planet.physicsBody?.contactTestBitMask = PhysicsCategory.rocket
planet.physicsBody?.collisionBitMask = PhysicsCategory.None
func planetCollidedWithRocket(rocket: SKSpriteNode, planet: SKSpriteNode) {
println("collision planet") }
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
secondBody = contact.bodyA }
if ((firstBody.categoryBitMask & PhysicsCategory.planet != 0) &&
(secondBody.categoryBitMask & PhysicsCategory.rocket != 0)) {
planetCollidedWithRocket(firstBody.node as! SKSpriteNode, planet: secondBody.node as! SKSpriteNode)}
В настоящее время я использую это, чтобы добавить обнаружение столкновений в мою игру (я взял только извлеченные фрагменты кода, которые, на мой взгляд, актуальны). В первый раз, когда я запускал игру на симуляторе, он работал отлично, и я добавил игру поверх сцены в метод planetCollidedWithRocket. Но я тестировал его снова сегодня, и по какой-то причине игра обнаруживает столкновение между ракетой и планетой, когда они не сталкиваются! Может ли кто-нибудь увидеть, что я сделал неправильно?SKPhysics работает неправильно?
Это решило мою проблему, большое вам спасибо! – JGrn84
Ты очень рад :) – Phoenix