gpt4 book ai didi

swift - iOS Sprite 接触检测

转载 作者:行者123 更新时间:2023-11-28 06:06:04 26 4
gpt4 key购买 nike

我正在开发一款角色可以爬梯子的平台游戏。由于每个梯子的总长度各不相同,因此我在 SceneEditor 中将多个梯子堆叠在一起。进入梯子后,联系人代表工作正常,我的代码允许角色向上移动。我遇到的问题是,一旦角色离开第一个阶梯段,didEnd 方法就会触发,即使角色已经进入下一个阶梯段。我已经通过给定阶梯段不同的类别掩码来绕过它。这是唯一的方法吗?

最佳答案

尝试将阶梯重叠 1 个梯级,然后设置一个计数,每当触发 didBegin 接触时将值增加 1 每当调用 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
}
}

关于swift - iOS Sprite 接触检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48176197/

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