【问题标题】:Swift SpriteKit Hearts not appending in last spotSwift SpriteKit Hearts 未附加在最后一个位置
【发布时间】:2020-08-10 03:33:36
【问题描述】:

我正在开发一款 SpriteKit 游戏,玩家从三颗心开始,当他被击中时会失去一颗心,如果他收集了一颗心形物品,他可以取回一颗心。我得到了一切工作,但当他恢复心脏时,它们会出现在最后一颗心脏周围。

// 1: here is the function for when he loses a heart

func takeDamage() {
        if invulnerable || damaged { return }
        lives -= 1
        
        let lastElementIndex = heartsArray.count - 1
        print(heartsArray.count)
        if heartsArray.indices.contains(lastElementIndex - 1) {
            let lastHeart = heartsArray[lastElementIndex]
            lastHeart.removeFromParent()
            print("removed heart")
            heartsArray.remove(at: lastElementIndex)
        }

// 2: here is the original filling of hearts

func fillHearts(count: Int) {
           for index in 1...count {
               let heartTexture = SKTexture(imageNamed: "heart")
               let heart = SKSpriteNode(imageNamed: "heart")
               heart.size = CGSize(width: heartTexture.size().width / 4, height: heartTexture.size().height / 4)
               let xPosition = heart.size.width * CGFloat(index - 1)
               heart.position = CGPoint(x: xPosition, y: 0)
               heartsArray.append(heart)
               heartContainer.addChild(heart)
               
               
           }

// 3: and here is the adding + 1 heart when he gets a heart item


if refillHeart == true {
            for index in 0..<1 {
                   let heartTexture = SKTexture(imageNamed: "heart")
                   let heart = SKSpriteNode(imageNamed: "heart")
                   heart.size = CGSize(width: heartTexture.size().width / 4, height: heartTexture.size().height / 4)
                   let xPosition = heart.size.width * CGFloat(index - 1)
                   heart.position = CGPoint(x: xPosition, y: 0)
                   heartsArray.append(heart)
                   heartContainer.addChild(heart)
                print(heartsArray)
                   refillHeart = false
            }
        }

【问题讨论】:

    标签: arrays swift sprite-kit


    【解决方案1】:

    这是因为在您的 for 循环中,index 始终为 0,因此 xPosition 将始终为 0。

    if refillHeart == true 
    {
        let heartTexture = SKTexture(imageNamed: "heart")
        let heart = SKSpriteNode(imageNamed: "heart")
        heart.size = CGSize(width: heartTexture.size().width / 4, height: heartTexture.size().height / 4)
    
        // this was the problem
        // let xPosition = heart.size.width * CGFloat(index - 1) 
        // because of your for loop, the index was always 0 
    
    
        // get number of displayed hearts
        let heartsNumber: CGFloat = CGFloat(heartsArray.count)
        let xPosition = heart.size.width * heartsNumber
    
        heart.position = CGPoint(x: xPosition, y: 0)
        heartsArray.append(heart)
        heartContainer.addChild(heart)
        print(heartsArray)
        refillHeart = false
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多