首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift SpriteKit红心未附加到最后一个位置

Swift SpriteKit红心未附加到最后一个位置
EN

Stack Overflow用户
提问于 2020-08-10 11:33:37
回答 1查看 23关注 0票数 0

我正在玩一款SpriteKit游戏,玩家一开始有三颗心,当他被击中时,他会失去一颗心,如果他收集了一颗心,他可以得到一颗心。我得到了所有的工作,但当他找回心脏时,它们出现在最后一颗心脏周围。

代码语言:javascript
复制
// 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
            }
        }
EN

回答 1

Stack Overflow用户

发布于 2020-08-13 13:55:18

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

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

https://stackoverflow.com/questions/63333768

复制
相关文章

相似问题

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