Я продолжаю получать ошибку fatal error: Index out of range
. В моем массиве должны быть четкие элементы из приведенных ниже изображений, но он пуст. Попытка отладить его часами, я не слишком уверен в том, что вызывает. См. Изображения и код ниже.Массив пустой, когда он должен содержать элементы
var topTest = [t2, t4, t8, t7, t2, t5, t8, t6 ]
for (index, point) in topTest.enumerate() {
spritesPath.append(point)
if index < topTest.count - 1 {
var previousArrayIndex = (index - 1)%topTest.count
if previousArrayIndex == -1 {
previousArrayIndex += topTest.count
}
var nextArrayIndex = (index + 1)%topTest.count
var firstIndex = topPositions.indexOf(point)
var secondIndex = topPositions.indexOf(topTest[nextArrayIndex])
var firstArray = top[firstIndex!]
var secondArray = top[secondIndex!]
var middleIndex1 = 0
var middleArray1 = [CGPoint]()
var middleRandomArrayLength1 : UInt32 = 0
var middleRandomPointIndex1 = 0
var middleIndex2 = 0
var middleArray2 = [CGPoint]()
var middleRandomArrayLength2 : UInt32 = 0
var middleRandomPointIndex2 = 0
if point.x > topTest[nextArrayIndex].x {
if point.x > topTest[previousArrayIndex].x {
let rightPositionsX = rightPositions.map({ $0.x })
middleArray1 = firstArray.filter({rightPositionsX.contains($0.x)})
middleRandomArrayLength1 = UInt32(middleArray1.count)
middleRandomPointIndex1 = Int(arc4random_uniform(middleRandomArrayLength1))
spritesPath.append(middleArray1[middleRandomPointIndex1])
middleIndex1 = rightPositions.indexOf(middleArray1[middleRandomPointIndex1])!
middleArray1 = right[middleIndex1]
let middleArray1X = middleArray1.map({ $0.x })
var midArray2 = secondArray.filter({middleArray1X.contains($0.x)})
midArray2 = midArray2.filter({element in point.x > element.x && topTest[nextArrayIndex].x < element.x })
middleRandomArrayLength2 = UInt32(midArray2.count)
middleRandomPointIndex2 = Int(arc4random_uniform(middleRandomArrayLength2))
spritesPath.append(middleArray2[middleRandomPointIndex2])
}
else{
let secondArrayX = secondArray.map({ $0.x })
middleArray1 = firstArray.filter({secondArrayX.contains($0.x)})
middleArray1 = middleArray1.filter({element in point.x > element.x && topTest[nextArrayIndex].x < element.x })
middleRandomArrayLength1 = UInt32(middleArray1.count)
middleRandomPointIndex1 = Int(arc4random_uniform(middleRandomArrayLength1))
spritesPath.append(middleArray1[middleRandomPointIndex1])
}
}
else
{
if point.x < topTest[previousArrayIndex].x {
let leftPositionsX = leftPositions.map({ $0.x })
middleArray1 = firstArray.filter({leftPositionsX.contains($0.x)})
middleRandomArrayLength1 = UInt32(middleArray1.count)
middleRandomPointIndex1 = Int(arc4random_uniform(middleRandomArrayLength1))
spritesPath.append(middleArray1[middleRandomPointIndex1])
middleIndex1 = leftPositions.indexOf(middleArray1[middleRandomPointIndex1])!
middleArray1 = left[middleIndex1]
let middleArray1X = middleArray1.map({ $0.x })
var midArray2 = secondArray.filter({middleArray1X.contains($0.x)})
midArray2 = midArray2.filter({element in point.x < element.x && topTest[nextArrayIndex].x > element.x })
middleRandomArrayLength2 = UInt32(midArray2.count)
middleRandomPointIndex2 = Int(arc4random_uniform(middleRandomArrayLength2))
spritesPath.append(midArray2[middleRandomPointIndex2])
}
else {
let secondArrayX = secondArray.map({ $0.x })
middleArray1 = firstArray.filter({secondArrayX.contains($0.x)})
middleArray1 = middleArray1.filter({element in point.x < element.x && topTest[nextArrayIndex].x > element.x })
middleRandomArrayLength1 = UInt32(middleArray1.count)
middleRandomPointIndex1 = Int(arc4random_uniform(middleRandomArrayLength1))
spritesPath.append(middleArray1[middleRandomPointIndex1])
}
}
}
}
Изображения ниже показывают, что secondArray
и middleArray
содержат аналогичные элементы и не должны быть пустыми
Перед отображением ошибки вы должны вычеркнуть все несоответствующий код и, желательно, сделать так, чтобы образец кода можно было вставить в игровое поле и запустить. Это сделало бы намного проще, если бы другие увидели, что происходит. –