Xcode,无法运行didBegin_contact SKPysics函数

问题描述

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。如果我将应用程序更新到

,问题是否还会解决?

解决方法

您这里缺少很多东西(除非您没有显示很多代码):

  1. 仅在物理物体之间发生接触,而您没有任何接触
  2. 您的课程不是SKPhysicsContactDelegate,并且您还没有使自己成为物理联系人代表。
  3. 您尚未定义要通知其代码的联系人。默认情况下,所有物理物体相互“碰撞”(碰撞),但是当任何物体接触(接触)时,您不会收到通知。

我在这里写了更多详细信息:How to Detect collision in Swift,Sprite kit

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...