SpriteKit / Swift – 当两个节点已经联系时如何检查两个节点的联系

在我的游戏中,当游戏开始时,一些节点已经联系,但是我没有find如何检测这些联系。 我只能成功地检测节点移动时发生的联系,并在游戏中使用函数didBeginContact进行联系。

任何人有一个想法,请如何检测这些联系人?

这里是我的didBeginContact如果需要的话:

func didBeginContact(contact: SKPhysicsContact) { var firstBody: SKPhysicsBody var secondBody: SKPhysicsBody if contact.bodyA.categoryBitMask == contact.bodyB.categoryBitMask { firstBody = contact.bodyA secondBody = contact.bodyB contactsList.append([firstBody.node!,secondBody.node!]) } } 

我刚刚试图让两个精灵从一开始就重叠,并为我检测到接触。 这里是代码:

 import SpriteKit struct Collider { static let SmallSquare : UInt32 = 1 << 0 static let BigSquare : UInt32 = 1 << 1 } class GameScene: SKScene, SKPhysicsContactDelegate { override func didMoveToView(view: SKView) { self.physicsWorld.contactDelegate = self let smallSquare = SKSpriteNode(color: .orangeColor(), size: CGSize(width: 50, height:50)) smallSquare.zPosition = 2 smallSquare.position = CGPoint(x: frame.midX, y: frame.midY) smallSquare.physicsBody = SKPhysicsBody(rectangleOfSize: smallSquare.size) smallSquare.physicsBody?.affectedByGravity = false smallSquare.physicsBody?.categoryBitMask = Collider.SmallSquare smallSquare.physicsBody?.contactTestBitMask = Collider.BigSquare smallSquare.physicsBody?.collisionBitMask = 0 addChild(smallSquare) let bigSquare = SKSpriteNode(color: .purpleColor(), size: CGSize(width: 200, height: 200)) bigSquare.zPosition = 1 bigSquare.position = CGPoint(x: frame.midX, y: frame.midY) bigSquare.physicsBody = SKPhysicsBody(rectangleOfSize: bigSquare.size) bigSquare.physicsBody?.affectedByGravity = false bigSquare.physicsBody?.categoryBitMask = Collider.BigSquare bigSquare.physicsBody?.contactTestBitMask = Collider.SmallSquare bigSquare.physicsBody?.collisionBitMask = 0 addChild(bigSquare) } func didBeginContact(contact: SKPhysicsContact) { print("Contact detected") } } 

稍后,要适当地检测某些机构之间的联系,您应该这样做:

 func didBeginContact(contact: SKPhysicsContact) { var firstBody, 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 & Collider.SmallSquare) != 0 && (secondBody.categoryBitMask & Collider.BigSquare != 0)) { print ("Contact detected") } } 

但是即使没有这些,第一次开始游戏时也会打印这个信息,因为接触是被物理世界检测到的。