SKSpritenodes дочерние узлы не отображаются в себе

Под моей сценой у меня есть:

let health = SKSpriteNode(imageNamed: "healthBar")

И когда собака наносит урон врагу, я хочу, чтобы противник создал панель здоровья над ней, показывая свое текущее здоровье.

Приведенный ниже код работает нормально, если я изменю строку вражеский аддхилд (здоровье) на "сам.аддчилд" (здоровье). Но когда это вражеский адд-чилд (здоровье), индикатор здоровья становится полностью невидимым. Я точно знаю, что панель здоровья есть, потому что я могу напечатать врага и детей, и он показывает его там, но его не видно. Какие-либо предложения?

** Обратите внимание, я не могу просто использовать self.addChild(здоровье), потому что мне нужно несколько баров здоровья, которые следуют за позициями нескольких врагов. Вот почему мне нужно, чтобы у каждого врага была своя шкала здоровья детей.

if body1.categoryBitMask == PhysicsCategories.DodgingDogPlayer && body2.categoryBitMask == PhysicsCategories.Enemy{ //if the player has hit an enemy
    if dogAttacking == true{
        dogAttackAnimation.position = CGPoint(x: dodgingDogPlayer.position.x, y: dodgingDogPlayer.position.y + 80)
        dogAttackAnimating()
        let waitToFade = SKAction.wait(forDuration: 0.5)
        let fadeOutSequence = SKAction.sequence([waitToFade, fadeOut])

        dogAttackAnimation.run(fadeOutSequence)
        if body2.node?.name == "Orange Cat" || body2.node?.name == "Brown Cat" || body2.node?.name == "Black Cat"{

            if ( body2.node?.childNode(withName: "health") != nil) {

                print ("already has health")
                if let enemy = contact.bodyB.node as? Enemy{

                    health.xScale = CGFloat(fixedHealthBarLength * CGFloat(enemy.healthStat))
                    health.position = CGPoint(x: enemy.position.x, y: enemy.position.y + 50)
                    health.texture?.filteringMode = SKTextureFilteringMode.nearest

                    enemy.healthStat -= 1
                    if enemy.healthStat <= 0{
                        body2.node?.removeFromParent()
                    }
                }

            } else if ( body2.node?.childNode(withName: "health") == nil) {

                print ("doesnt have health")
                health.yScale = 2
                health.zPosition = 10
                health.name = "health"
                if let enemy = contact.bodyB.node as? Enemy{

                    health.anchorPoint = CGPoint(x: 0.5, y: 0)
                    health.xScale = CGFloat(fixedHealthBarLength * CGFloat(enemy.healthStat))
                    health.position = CGPoint(x: enemy.position.x, y: enemy.position.y + 50)
                    health.alpha = 1
                    health.texture?.filteringMode = SKTextureFilteringMode.nearest
                    enemy.addChild(health)

                    enemy.healthStat -= 1
                    if enemy.healthStat <= 0{
                        body2.node?.removeFromParent()
                    }
                }

            }
        }
    }

0 ответов

Другие вопросы по тегам