Swift: как зарезервировать Capacity () для узлов SKSprite - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь выделить данные спрайта в глобальный массив, используя заданные индексы для спрайтов. Я инициализирую массив как массив SKSpriteNodes. Я посылаю SKSpriteNodes в этот массив, каждый спрайт имеет заданный индекс для этого массива. Я понимаю, что я мог бы также сделать это с помощью цикла вместо установки индексов, но сначала я хочу выяснить распределение массива.

Я попытался сделать ReserveCapacity (27), потому что будет 27 спрайтов для передачи, но при попытке получить индекс вне ошибки.

class GameScene: SKScene
{

    //main array that will be used to store sprite button data
    var mainArr: [SKSpriteNode] = [SKSpriteNode]()


..


    override func didMove(to view: SKView)
        {
            mainArr.reserveCapacity(27)

         ...

        if let name = touchedNode.name
        {

            if name == "pea"
            {
                peaFlag = peaFlag * -1
                manageArrayData(name: pea, nameFlag: peaFlag, nameIndex: peaInd)/*may need to add images*/
            }
    ...}//end touchNode


 ...} //end didMoveTo 


func manageArrayData(name: SKSpriteNode, nameFlag: Int, nameIndex: Int)
    {

        if nameFlag >= 0
        {
            print(nameFlag)
            print(nameIndex)
            print("in array")
            mainArr.insert(name, at: nameIndex)
            //dump(mainArr)
            print("-=-=-=-in-=-=-=-")
        }

как я уже сказал, ошибка: фатальная ошибка: индекс массива находится вне диапазона 2019-06-27 09: 54: 09.414271-0700 Выбрать [36307: 1432579] Неустранимая ошибка: индекс массива находится вне диапазона

Я полагаю, что ошибка в том, что ReserveCapacity () имеет тип Int, в то время как я пытаюсь выделить память для SKSpriteNode ... поэтому нет места для того, что я выделяю, следовательно, "вне диапазона"

есть несколько «кнопок» (использующих SKSpriteNodes), поэтому я создал дерево if для кнопок, на которые они попадают.

1 Ответ

0 голосов
/ 27 июня 2019

reserveCapacity не создает записи в массиве.Это просто гарантирует, что вам не нужно выполнять перераспределение (и возможное перемещение), если вы добавите столько записей.Как правило, это необходимо только для повышения производительности.Это ничего не изменит в том, как работает индексация.

Если вы хотите пустые записи в массиве, вам нужно добавить их.См. Array(repeating:count:), чтобы создать массив с некоторыми фиксированными значениями.

...