【问题标题】:Xcode, Unable to run the didBegin(_contact SKPysics) functionXcode,无法运行 didBegin(_contact SKPysics)函数
【发布时间】:2020-08-26 17:44:08
【问题描述】:
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 版。如果我将应用程序更新为,问题是否仍然存在

【问题讨论】:

    标签: swift xcode sprite-kit skspritenode skphysicsbody


    【解决方案1】:

    你在这里遗漏了很多东西(除非你有很多你没有显示的代码):

    1. 接触只发生在物理实体之间,你没有任何接触
    2. 您的班级不是 SKPhysicsContactDelegate,而且您还没有将自己设为物理联系人代理。
    3. 您尚未定义希望您的代码收到通知的联系人。默认情况下,所有物理实体会相互“反弹”(碰撞),但当任何实体接触(接触)时,您不会收到通知。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2020-11-10
      • 1970-01-01
      相关资源
      最近更新 更多