Я обновлял проект SpriteKit/GameplayKit для Xcode 8 и нового редактора сцен, который позволяет добавлять в сцену информацию Entity-Component. Я должен был переместить свой код объекта в сцену, но у меня возникли проблемы с доступом к объекту из соответствующего узла. Согласно документации Apple:
Любой узел SpriteKit в сцене, к которому вы присоединили объект или компоненты, автоматически имеет объект GKSKNodeComponent для управления отношениями между узлом и объектом GKEntity, который он представляет.
и
Добавление объекта GKSKNodeComponent к сущности автоматически обновляет свойство сущности узла SpriteKit компонента (объект SKNode), чтобы оно указывало на эту сущность.
Новый код, который мне нужно загрузить, в основном выглядит следующим образом:
guard let newTowerScene = GKScene(fileNamed: "TowerScene"),
let rootScene = newTowerScene.rootNode as? SKScene
else { return }
self.view?.presentScene(rootScene, transition: SKTransition.push(with: .up, duration: 1.75))
Доступ к объекту GKScene
возвращает массив правильно загруженных объектов, но если я попытаюсь получить доступ к объекту с GKEntity.entity
из подключенного узла, он вернет nil. Узел подключен через доступ к GKSKNodeComponent.node
из объекта в GKScene
.
Как заставить GKSKNodeComponent
и GKScene
автоматически обновлять свойство entity
SKNode
, как и ожидалось?
newTowerScene
рядом, или он может быть вне области действия/освобожден к тому времени, когда вы ищете узелentity
? Это свойство является слабым, а сущности принадлежатGKScene
, поэтому, если вы избавляетесь от сцены, не сохраняя список ее сущностей, сущности исчезают, а слабая ссылка обнуляется. - person rickster   schedule 17.09.2016GKScene
через свойство подклассаSKScene
, но даже если я устанавливаю точку останова сразу после инициализацииGKScene
, наблюдается такое же поведение. - person Duncan Oliver   schedule 17.09.2016