首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS雪碧接触检测

iOS雪碧接触检测
EN

Stack Overflow用户
提问于 2018-01-09 20:29:04
回答 1查看 53关注 0票数 1

我在做一个平台游戏,角色可以爬梯子。由于每个梯子的总长度不同,我在SceneEditor中有几个梯子堆放在一起。进入梯子后,联系人代表可以正常工作,我的代码允许角色向上移动。我遇到的问题是,一旦字符从第一个阶梯段移出,即使角色已经进入下一个阶梯段,didEnd方法也会触发。我通过给梯子段不同类别的面具来绕开它。这是唯一的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-09 22:10:01

尝试将梯子重叠1级,然后在触发didBegin联系人时设置一个计数,每当调用didEnd时,将值增加1。在didEnd函数的末尾,检查是否为onladderCount == 0。如果是的话,当玩家不在梯子上的时候,触发任何应该发射的代码。

这假设您有一个梯子类,并且必须在onLadder的梯形类中放置一个属性,以确保不多次调用+= 1。

代码语言:javascript
复制
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
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48176197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档