微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么当我仍然与精灵碰撞时不再识别我的碰撞?

如何解决为什么当我仍然与精灵碰撞时不再识别我的碰撞?

我们正在尝试为我们正在创建的游戏创建一个充电站,当玩家与充电器发生碰撞时,该充电站会增加。为此,我们为播放器创建了一个类别,并为充电器创建了一个类别。在我们的 didBegin 函数中,它在发生碰撞时被激活,如下所示,健康(这是一个全局变量增加,并且充电设置为 true。为了确保玩家停止与充电器碰撞后健康不会继续增加,我们有一个 didEnd 函数,仅在碰撞不再发生时才会发生。这会将收费变量设置为 false。在我们的更新函数中,我们有条件语句来说明如果收费是真还是假,我们的代码应该发生什么。当它为真时,生命值会增加一点,并且不会高于 1 或低于零以使其保持在界限内。当它为 false 时,健康会减少一点,并且也不会高于 1 或低于零以使其保持在界限内。我们遇到的问题是当玩家第一次与充电器碰撞时,充电变量设置为true,但只要它移动一点,即使它仍然与充电器碰撞,变量也会设置为假,它不再收费。我们是否遗漏了什么/是否有更好的方法来设置充电站?

let chargerCategory: UInt32 = 0b1000 //6 if charge is in contact with player,then increase


func didBegin(_ contact: SKPhysicsContact) {
        var body1 = SKPhysicsBody()
        var body2 = SKPhysicsBody()
        
        if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask{
            body1 = contact.bodyA
            body2 = contact.bodyB
        }
        else{
            body1 = contact.bodyB
            body2 = contact.bodyA
        }
               
        if body1.categoryBitMask == playerCategory && body2.categoryBitMask == chargerCategory{
            //if player hit charger
            //health += 0.001
            //HealthBar.xScale = health
            print("CHARGING...",health)
            charging = true
        }

func didEnd(_ contact: SKPhysicsContact) {
        var body1 = SKPhysicsBody()
        var body2 = SKPhysicsBody()
        
        if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask{
            body1 = contact.bodyA
            body2 = contact.bodyB
        }
        else{
            body1 = contact.bodyB
            body2 = contact.bodyA
        }
        
        if body1.categoryBitMask == playerCategory && body2.categoryBitMask == chargerCategory{
            charging = false
        }
        

    }


override func update(_ currentTime: TimeInterval) {
        if charging == false{
            health -= 0.0001
            HealthBar.xScale = health
            if health < 0 {
                health = 0
            }
            if health > 1.0{
                health = 1.0
            }
        }
        if charging == true{
            health += 0.001
            HealthBar.xScale = health
//            print("CHARGING...",health)
            
            if health < 0 {
                health = 0
            }
            if health > 1.0{
                health = 1.0
            }
        }
        print(health)
        print(charging)
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。