如何正确删除 SKSpriteNode
How to remove a SKSpriteNode correctly
我正在 Swift 3
和 SpriteKit
做一个小游戏。我想与我的角色和一个特殊物体发生碰撞,使我的分数增加 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 中设置 属性 或将对象设为自定义对象并在自定义对象 [=17] 中设置 属性 =]
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 3
和 SpriteKit
做一个小游戏。我想与我的角色和一个特殊物体发生碰撞,使我的分数增加 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 中设置 属性 或将对象设为自定义对象并在自定义对象 [=17] 中设置 属性 =]
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)"
}