gpt4 book ai didi

swift - 如何正确删除 SKSpriteNode

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:01 24 4
gpt4 key购买 nike

我正在用 Swift 3SpriteKit 做一个小游戏。我想与我的角色和一个特殊物体发生碰撞,使我的分数增加 1,但由于某种原因,当我检测到碰撞时,分数增加了 2 或 3。

我正在从父节点中删除我的 SpriteKitNode 但它似乎不起作用。

这是我的代码:

func checkCollisionsObject(){

enumerateChildNodes(withName: "objeto") {node, _ in
let objeto = node as! SKSpriteNode
if objeto.frame.intersects(self.personaje.frame){
objeto.removeFromParent()
self.actualizarPoints()
//self.labelNivel.text = "Level: \(self.nivel)"
}
}

}


func actualizarPoints() {

self.pointsCounter += 1
points.text = "Points: \(pointsCounter)"

}

最佳答案

问题是碰撞检测发生在 60fps(相当快)。所以在那段时间发生了多次碰撞检测。你只是在处理第一个。

我通常喜欢在对象上设置一个我可以触发的属性,这样我就可以知道对象是否发生了碰撞,并将其设置为不再检测到碰撞。

在您的情况下,该对象只是一个 SKSpriteNode,因此您必须在 userData 中设置该属性或将该对象设为自定义对象并在自定义对象类中拥有该属性

func checkCollisionsObject(){

enumerateChildNodes(withName: "objeto") {node, _ in
let objeto = node as! CustomObject
if objeto.frame.intersects(self.personaje.frame) && objeto.hasCollided == false {
objeto.hasCollided = true
objeto.removeFromParent()
self.actualizarPoints()
}
}
}

func actualizarPoints() {

self.pointsCounter += 1
points.text = "Points: \(pointsCounter)"

}

关于swift - 如何正确删除 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com