Можете ли вы проверить, не связан ли SKSpriteNode с другим? - PullRequest
1 голос
/ 18 апреля 2020

Я работаю над игрой, в которой игрок перемещается по космической станции, состоящей из плиток (называемых частями, наследующими SKSpriteNode). Одна из этих частей - «Источник».

Вот полезное изображение.

Here is a helpful image.

В игре астероиды могут поразить космическую станцию ​​и привести к разрушению плиток. , Когда это происходит, мне нужно проверить, все ли плитки все еще подключены к источнику. Если это не так, их нужно удалить со станции (не может быть плавающих плиток!). Полезный момент: у каждой плитки есть имя «T | Пустой» или для источника «T | Source». Кроме того, функция receiveConnectedTiles просто находит плитки вверх, вниз, влево и вправо от части.

То, что я пробовал

func checkIfConnectedToSource(_ part: SpaceStationPart) -> Bool {
    var foundSource = false

    let splitArray1 = part.name?.components(separatedBy: "|")
    if splitArray1?[1] == "Source" {
        foundSource = true
    }

    while !foundSource {
        let connections = part.obtainConnectedTiles(scene: self)
        if connections.count != 0 {
            for i in 0..<connections.count {
                let splitArray = connections[i].name?.components(separatedBy: "|")
                if splitArray?[1] != "Source" {
                    if checkIfConnectedToSource(connections[i]) {
                        foundSource = true
                    }
                } else {
                    foundSource = true
                }
            }
        } else {
            print("Connections was 0!")
        }
    }

    return foundSource
}

Я пробовал это , но он бросил «EXC_BAD_ACCESS» в строке, когда я нахожу компоненты имени, хотя я не уверен, почему.

Плитки также всегда находятся в сетке, на расстоянии 100 точек друг от друга.

Итак, вопрос сводится к следующему: Как я могу проверить, подключен ли SKSpriteNode к другому SKSpriteNode, иногда косвенно?

...