나는 다양한 충돌을 가지고 게임을하고있다. 내가categoryBitMask Returning UInt32.max
func didBeginContact(contact: SKPhysicsContact) {
print("Body A: " + String(contact.bodyA.categoryBitMask))
print("Body B: " + String (contact.bodyB.categoryBitMask) + "\n")
}
그러나 정보를 인쇄 할 경우
다음let localPlayerCategory: UInt32 = CollisionCategories.localPlayer.rawValue
let ballCategory: UInt32 = CollisionCategories.ball.rawValue
let remotePlayerCategory: UInt32 = CollisionCategories.remotePlayer.rawValue
let sceneCategory: UInt32 = CollisionCategories.scene.rawValue
let goalCategory: UInt32 = CollisionCategories.goal.rawValue
이며, 목표와 공 :
enum CollisionCategories: UInt32 {
case localPlayer = 1
case ball = 2
case remotePlayer = 4
case scene = 8
case goal = 16
}
내가 다음 몇 가지 범주 변수를 만들어 다음과 같이 내가 열거를 만들었습니다 충돌하면 다음과 같이 반환됩니다.
Body A: 4294967295
Body B: 2
바디 B가 볼 카테고리입니다. 그러나 몸 A는 분명히 꺼져 있습니다. 오히려 단지 섹션보다 있는지 확인하기 위해, 당신은 내가 밖으로 위의 주석 라인에서 볼 수 있듯이, 나는 또한 목표로 전체 물리 본체 설정을 시도
let goal2 = self.newGoal()
goal2.zRotation = CGFloat(M_PI)
goal2.position = CGPoint(x: (gameFrame!.frame.width/2), y: 0)
let bottom2 = SKPhysicsBody(edgeFromPoint: CGPoint(x: -(goal2.frame.width), y:-(goal2.frame.height/2)), toPoint: CGPoint(x: 0, y:-(goal2.frame.height/2)))
bottom2.categoryBitMask = sceneCategory
let top2 = SKPhysicsBody(edgeFromPoint: CGPoint(x: -(goal2.frame.width), y:(goal2.frame.height/2)), toPoint: CGPoint(x: 0, y:(goal2.frame.height/2)))
top2.categoryBitMask = sceneCategory
let back2 = SKPhysicsBody(edgeFromPoint: CGPoint(x: -(goal2.frame.width), y:(goal2.frame.height/2)), toPoint: CGPoint(x: -(goal2.frame.width), y:-(goal2.frame.height/2)))
back2.categoryBitMask = goalCategory
goal2.physicsBody = SKPhysicsBody(bodies: [bottom2,top2,back2])
//goal2.physicsBody!.categoryBitMask = goalCategory
goal2.physicsBody!.usesPreciseCollisionDetection = true
goal2.physicsBody!.affectedByGravity = false
goal2.physicsBody!.dynamic = false
: 여기에 내가 목표 노드를 작성하는 방법입니다 그것이 문제의 원인이었습니다. 그렇지 않았습니다.
그래서ball.physicsBody!.collisionBitMask = localPlayerCategory | sceneCategory | goalCategory
ball.physicsBody!.categoryBitMask = ballCategory
ball.physicsBody!.contactTestBitMask = goalCategory
가 bodyA의 categoryBitMask가 최대 UINT32을 반환 생각하는 이유, 사람이 설명 할 수 있습니다 : 나는 공의 물리 특성을 만드는 방법은 다음과
은? 목표를 때리는 공을 제외한 모든 충돌은 잘 작동합니다.
또한 빠른 측면 질문 : bodyA 및 bodyB가 선택되는 방법을 아는 사람이 있습니까? 왜 어떤 걸까요? 감사!
왜 값 대신 원시 값을 얻습니까? CollisionCategories.ball.rawValue == CollisionCategories.ball이므로 공이 정확합니다. –
@SimonePistecchia 당신이 의미하는 것이 확실하지 않습니다 ... UInt32 값을 얻으려면 rawValue를 실행해야합니다. 그렇지 않으면 categoryBitMask를 설정할 수 없습니다. – Kendel
목표 2에는 categoryBitMask가 없으므로 기본값은 UInt32.max – Knight0fDragon