我遇到了一个非常奇怪的错误,我无法弄清楚。在我的比赛中,你驾驶一辆2D飞机试图避开障碍物(如摇滚或汽车)。障碍可能出现在3个不同的路径上。有时在任何路径上只有一个障碍,或者有时在三条路径中的两条路径上存在两个障碍。奇怪的SpriteKit For Loop Bug
我遇到的问题是,当两个障碍物出现,然后在他们离开屏幕时被删除,当前在屏幕上移动的障碍之一也被“删除”(我知道这是因为控制台打印“已删除对象“3次)。但是,随机“删除”的障碍不会从视图中删除。相反,它冻结了之前的地方,永远不会消失。
这里是我有问题的代码块:
var canGetScore = true
for (num,obj) in enumerate(obstaclesToMove) {
obj.position.y -= CGFloat(gameSpeed)
if obj.position.y <= userCar.position.y && obj.name == "NotPassed" {
obj.name = "Passed"
if canGetScore {
canGetScore = false
score += 1
scoreLabel.text = "\(score)"
}
}
if obj.position.y <= -CGRectGetMidY(self.frame) {
obj.removeFromParent()
obstaclesToMove.removeAtIndex(num)
println("deleted object")
}
}
可变密钥:
“obstaclesToMove”是障碍物(SKSpriteNodes)的阵列应该向下移动屏幕。
“gameSpeed”是屏幕每帧移动多少个像素的整数(在这种情况下值为5)。
“userCar”是用户控制的字符(SKSpriteNode)。
“canGetScore”是为了消除我以前遇到的另一个错误。我知道一个事实,这不会导致我目前的错误。
有没有人有任何想法,为什么发生这种情况?如果你需要更多解释,请问。
附加说明:用户的汽车在技术上从不移动,但背景和障碍物移动。
OP还可以使用'stride(from:through:by:)'以相反的顺序遍历'obstacToMove'中的项并避免额外的数组/循环。 – 0x141E
我不知道我怎么看不到。我一定会用你的答案。谢谢! – gooroo7