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

问题描述

我们正在尝试为我们正在创建的游戏创建一个充电站,当玩家与充电器发生碰撞时,该充电站会增加。为此,我们为播放器创建了一个类别,并为充电器创建了一个类别。在我们的 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 (将#修改为@)