我正在玩一款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
}
}发布于 2020-08-13 13:55:18
这是因为在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
}https://stackoverflow.com/questions/63333768
复制相似问题