我在做一个平台游戏,角色可以爬梯子。由于每个梯子的总长度不同,我在SceneEditor中有几个梯子堆放在一起。进入梯子后,联系人代表可以正常工作,我的代码允许角色向上移动。我遇到的问题是,一旦字符从第一个阶梯段移出,即使角色已经进入下一个阶梯段,didEnd方法也会触发。我通过给梯子段不同类别的面具来绕开它。这是唯一的办法吗?
发布于 2018-01-09 22:10:01
尝试将梯子重叠1级,然后在触发didBegin联系人时设置一个计数,每当调用didEnd时,将值增加1。在didEnd函数的末尾,检查是否为onladderCount == 0。如果是的话,当玩家不在梯子上的时候,触发任何应该发射的代码。
这假设您有一个梯子类,并且必须在onLadder的梯形类中放置一个属性,以确保不多次调用+= 1。
var onladderCount: Int = 0
func didBegin(_ contact: SKPhysicsContact) {
let contactAName = contact.bodyA.node?.name
let contactBName = contact.bodyB.node?.name
if (contactAName == "ladder") || (contactBName == "ladder") {
let ladder: Ladder? = (contact.bodyA.categoryBitMask == PhysicsCategory. ladder ? (contact.bodyA.node as? Ladder) : (contact.bodyB.node as? Ladder))
if !ladder.onLadder {
ladder.onLadder = true
onladderCount += 1
}
}
}
func didEnd(_ contact: SKPhysicsContact) {
let contactAName = contact.bodyA.node?.name
let contactBName = contact.bodyB.node?.name
if (contactAName == "ladder") || (contactBName == "ladder") {
let ladder: Ladder? = (contact.bodyA.categoryBitMask == PhysicsCategory. ladder ? (contact.bodyA.node as? Ladder) : (contact.bodyB.node as? Ladder))
if ladder.onLadder {
ladder.onLadder = false
onladderCount -= 1
}
}
if onladderCount == 0 {
//trigger whatever code happens when they leave a ladder
}
}https://stackoverflow.com/questions/48176197
复制相似问题