我在update
方法中使用以下逻辑来跟踪我的节点的位置,一旦达到某个点,它将从场景中移除,得分将增加1。
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
println(colorDot.position)
var checkPoint = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 3 + 50)
if colorDot.position.y < checkPoint.y {
if colorDotColor == centerBoxColor {
score++
colorDot.removeFromParent()
} else {
println("unable to calculate score")
colorDot.removeFromParent()
}
}
println(score)
}
我遇到的问题是当colorDot达到某个点时,它将从场景中删除,但分数会不断增加。我在想我的代码中存在逻辑缺陷。以下是控制台的截图。
答案 0 :(得分:1)
仅仅因为从父节点中删除colorDot
不会从对象中删除实例。这意味着对checkPoint
的位置检查将通过。
// This will be true even if colorDot is not part of the node hierarchy
if colorDot.position.y < checkPoint.y
您可以扩展检查以确保它仍在层次结构中:
if colorDot.parent != nil && colorDot.position.y < checkPoint.y
答案 1 :(得分:1)
当您使用colorDot.removeFromParent()
时,colorDot
对象仍然有一个位置,除非您删除该对象或覆盖它,否则if colorDot.position.y < checkPoint.y
将为true。
尝试添加
if colorDot.parent === self
(如果colorDot已添加到self
)。