ios - 检查播放器是否在另一个节点之上?

标签 ios swift sprite-kit

我正在尝试让我的玩家跳跃。但是我不能让他在半空中跳跃,所以我需要在施加冲动之前检查它是否站在另一个节点之上。

其他 sprite-kit 游戏通常如何做到这一点?


现在我正在尝试两种方法,第一种就是这个。这很好,但我不知道如何判断玩家正在触摸的节点是否真的在玩家下方或侧面。

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    var allowJump = false
    let bodies = player.physicsBody.allContactedBodies()
    for body : AnyObject in bodies {
        if let node = body.node {
            allowJump = true // Player is touching another node but we don't know where (the bottom of the player or it's sides)
        }
    }
}

这是另一种方法,它可以有效地判断接触是否开始以及接触是否真的与地面(玩家下方)而不是墙壁等。但是我不知道如何判断玩家何时停止在任何节点之上,因为即使接触结束,他可能仍会接触另一个节点。

func didBeginContact(contact: SKPhysicsContact!){
    if(contact.bodyA.node.position.y < contact.contactPoint.y) {
        println("BodyA is on top of another node")
    }

    if(contact.bodyB.node.position.y < contact.contactPoint.y) {
        println("BodyB is on top of another node")
    }
}

func didEndContact(contact: SKPhysicsContact!){
     if(contact.bodyA.node.position.y < contact.contactPoint.y) {
        println("BodyA is on no longer on top of BodyB")
    }

    if(contact.bodyB.node.position.y < contact.contactPoint.y) {
        println("BodyB is no longer on top of BodyA")
    }
}

最佳答案

这就是我现在正在做的,但是它不会让我知道它接触的节点是在下方/左侧/右侧。我可以简单地将它的位置与我的节点进行比较,但有些节点是空心的,如 edgeLoopF​​romPath 或具有不同的形状。

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    var allowJump = false
    let bodies = player.physicsBody.allContactedBodies()
    for body : AnyObject in bodies {
        if let node = body.node { // Additionally check contactBitMask
            allowJump = true
        }
    }
}

关于ios - 检查播放器是否在另一个节点之上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24830926/

相关文章:

ios - 解析服务器(aws-mongolab)图像未检索

swift - swift 中的可选 if 语句在幕后发生了什么

ios - SKTexture预加载

swift - 在 SpriteKit (swift) 中生成多次相同节点的最佳实践

ios - 如何在触摸屏幕时让 'poo' 出现在某个地方?

ios - 以编程方式更改 iOS 项目的设备参数

IOS - 粘性 UICollectionView header (如 Apple App Store)

iphone - MKMapView 中的缩放级别

ios - 如何使用restkit获取一个简单的json字符串数组

ios - 基于页面的应用程序过载内存 ARC 不释放页面