【问题标题】:How to check if a SpriteNode touches another SpriteNote?如何检查一个 Sprite 节点是否接触到另一个 Sprite Note?
【发布时间】:2017-01-19 05:24:32
【问题描述】:

所以我想做的是一个当他在地上时能够跳跃但当他在空中时却不能跳跃的球员。老实说,我不知道如何做到这一点,因为我是新手。

【问题讨论】:

    标签: swift xcode sprite-kit


    【解决方案1】:

    我会在播放器类中有一个实例变量,例如var isOnGround: Bool = true。然后我会使用SKPhysicsBody 为玩家和地面设置一个物理体。然后检查玩家和地面的didBegin(...)didEnd(...)(联系方式)中的碰撞。在didBegin(...) 中将isOnGround 变量设置为true,在didEnd(...) 方法中将其设置为false。

    以下是不同位掩码属性的示例:

    let playerCollisionNumber: UInt32 = 0x1 << 0
    let groundCollisionNumber: UInt32 = 0x1 << 1
    
    //node's own collision number
    player.physicsBody.categoryBitMask = playerCollisionNumber 
    
    //makes the player's physics body interact/collide with the ground's physics body
    player.physicsBody.collisionBitMask = groundCollisionNumber 
    
    //setting this allows you to be able to interject your own code when the player's physics body and the ground's physics body interact (in the didBegin and didEnd methods)
    player.physicsBody.contactTestBitMask = groundCollisionNumber 
    

    然后对地面做同样的事情:

    groundNode.physicsBody.categoryBitMask = groundCollisionNumber
    groundNode.physicsBody.collisionBitMask = playerCollisionNumber
    groundNode.physicsBody.categoryBitMask = playerCollisionNumber
    

    您将在didBegin()didEnd() 方法中设置isOnGround 变量,如下所示:

    let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
    
    //in didBegin()
    if contactMask == (playerCollisionNumber | groundCollisionNumber) {
        player.isOnGround = true
    }
    
    //in didEnd()
    if contactMask == (playerCollisionNumber | groundCollisionNumber) {
        player.isOnGround = false
    }
    

    【讨论】:

    • 问题是,我不知道如何制作或使用那些 CatergoryBitMasks 或 ContactBitMasks。
    • @LukasDomeisen,有关位掩码的简要概述,请参阅我的更新答案。
    • 谢谢,你能告诉我如何实现 isOnGround 布尔值吗?
    • 我在这行有一个问题: let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask 有一个错误提示 Use of unresolved identifier "contact"
    • 你能帮我解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多