두 개의 노드, 하나의 "고양이"와 하나의 "쥐"가 있지만 어떤 이유로 인해 충돌이 감지되지 않습니다. 나는 마스크이 방법을 사용하고 있습니다 :SpriteKit 충돌이 감지되지 않습니다.
// Cat physics body, the node's name is "cat"
public func initializeAt(position: CGPoint) {
sprite.position = position
sprite.zPosition = 5
sprite.name = "cat"
sprite.alpha = 0.7
scene.sceneContent.addChild(sprite)
sprite.physicsBody = SKPhysicsBody(rectangleOf: sprite.size)
sprite.physicsBody!.isDynamic = false
sprite.physicsBody!.categoryBitMask = CollisionTypes.cat.rawValue
sprite.physicsBody!.contactTestBitMask = CollisionTypes.rat.rawValue
sprite.physicsBody!.collisionBitMask = CollisionTypes.rat.rawValue
// Rat physics body, the nodes name is "rat"
init() {
node.name = "rat"
node.zPosition = 5
node.physicsBody = SKPhysicsBody(rectangleOf: node.size)
node.physicsBody!.isDynamic = false
node.physicsBody!.categoryBitMask = CollisionTypes.rat.rawValue
node.physicsBody!.contactTestBitMask = CollisionTypes.cat.rawValue
node.physicsBody!.collisionBitMask = CollisionTypes.cat.rawValue
setupFrames()
}
가 여기 내 didBegin() 방법이다 : 나는 그들의 물리학 몸을 초기화 곳
다음enum CollisionTypes: UInt32 {
case holder = 1
case chef = 2
case powerups = 4
case ingredients = 8
case utensils = 16
case floor = 32
case bag = 64
case table = 128
case tip = 256
case rat = 512
case cat = 1024
}
입니다. 그러나 if 문 중 하나도 실행되지 않고 왜이 프로젝트를 다른 방법으로 사용했는지 알 수 없습니다. 나는 contactTestBitMasks 놀아 그들에게 "재료"와 같은 다른 일을하려고하면
func didBegin(_ contact: SKPhysicsContact) {
if let node1 = contact.bodyA.node as? SKSpriteNode,
let node2 = contact.bodyB.node as? SKSpriteNode {
if node1.name == "rat" && node2.name == "cat" {
for rat in rats {
if node1 == rat.node {
rat.die()
}
}
Cat.shared.resetPosition()
return
}
else if node1.name == "cat" && node2.name == "rat" {
for rat in rats {
if node2 == rat.node {
rat.die()
}
}
Cat.shared.resetPosition()
return
}
, 나는 고양이와 쥐 재료와 상호 작용하지만, 그들은 단지 못해 서로와 상호 작용하는 것처럼 보이는 것을 볼 수 있습니다.
노드 이름을 지정하지 않아도된다고 주장 할 수 있지만 제공된 코드에서 이름을 지정하지 마십시오. – Knight0fDragon
노드 이름의 출처는 어디입니까? –
나는 내 노드의 이름을 짓는다. 미안하지 않았다. 나는 나의 질문을 편집했다. 하지만 다른 physicsbodies와 상호 작용하는지 테스트하기 위해 이름을 올바르게 사용했음을 알고 있습니다. – Brejuro