Я встречаюсь с очень странной ошибкой, которую я просто не могу понять. В моей игре вы управляете автомобилем на двухмерном самолете, пытаясь избежать препятствий (например, рок или автомобиль). Препятствия могут появляться на 3 разных дорожках. Иногда на любом из путей есть только одно препятствие, или иногда на двух из трех путей есть два препятствия.Strange 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")
}
}
Variable Ключ:
"obstaclesToMove" является массивом препятствий (SKSpriteNodes), которые должны быть перемещены вниз по экрану ,
«gameSpeed» - это целое число пикселей, которое экран перемещает каждый кадр (в этом случае значение равно 5).
«userCar» - это символ, который пользователь контролирует (SKSpriteNode).
«canGetScore» вещь - устранить еще одну ошибку, с которой я столкнулся раньше. Я знаю, что это не вызывает текущую ошибку, которую я испытываю.
Есть ли у кого-нибудь идеи, почему это происходит? Если вам нужно больше объяснений, просто спросите.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Автомобиль пользователя технически никогда не перемещается, но фон и препятствия перемещаются.
OP также может перебирать элементы в 'препятствияToMove' в обратном порядке с помощью' stride (from: through: by:) 'и избегать дополнительного массива/цикла. – 0x141E
Я не знаю, как я не мог этого видеть. Я обязательно буду использовать ваш ответ. Благодаря! – gooroo7