问题描述
class GameScene: SKScene {
let player = SKSpriteNode(imageNamed: "spaceship")
struct PhysicsCategories {
static let None: UInt32 = 1
static let Player: UInt32 = 0b1
static let Obsticles: UInt32 = 0b10
static let Diamond: UInt32 = 0b100
}
func didBegin(_ contact: SKPhysicsContact) {
var body1 = SKPhysicsBody()
var body2 = SKPhysicsBody()
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
body1 = contact.bodyA
body2 = contact.bodyB
}
else {
body1 = contact.bodyB
body2 = contact.bodyA
}
if body1.categoryBitMask == PhysicsCategories.Player && body2.categoryBitMask == PhysicsCategories.Obsticles {
body1.node?.removeFromParent()
body2.node?.removeFromParent()
}
}
我要在钻石与玩家接触时以及玩家与障碍物接触时移除钻石。 目前我无法注册他们之间的联系 我目前正在使用Xcode版本9.4.1。如果我将应用程序更新到
,问题是否还会解决?解决方法
您这里缺少很多东西(除非您没有显示很多代码):
- 仅在物理物体之间发生接触,而您没有任何接触
- 您的课程不是SKPhysicsContactDelegate,并且您还没有使自己成为物理联系人代表。
- 您尚未定义要通知其代码的联系人。默认情况下,所有物理物体相互“碰撞”(碰撞),但是当任何物体接触(接触)时,您不会收到通知。
我在这里写了更多详细信息:How to Detect collision in Swift,Sprite kit