gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 22:14:28 26 4
gpt4 key购买 nike

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

其他 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com