Xcode 8 용 SpriteKit/GameplayKit 프로젝트와 장면에 Entity-Component 정보를 추가 할 수있는 새로운 Scene Editor를 업데이트했습니다. 실체로 내 실체 코드를 옮기려고했지만 해당 노드에서 엔티티에 액세스하는 데 문제가 있습니다. 애플의 설명서에 따라 :GKScene 및 SKNode.entity
장면의 모든 SpriteKit 노드가있는 당신이 엔티티 또는 구성 요소를 부착 한 자동 노드 및 상기 GKEntity 사이의 관계가 나타내는 개체를 관리 할 수있는 GKSKNodeComponent 개체가 있습니다.
및 기업에 GKSKNodeComponent 객체를 추가
는자동으로 해당 개체를 가리 키도록 구성 요소의 SpriteKit 노드 (AN SKNode 객체)의 개체 속성을 업데이트합니다. 다음과 같이
나는 장면을로드 할 수있는 새로운 코드는 기본적으로 다음 GKScene
개체에 액세스
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))
제대로로드 개체의 배열을 반환합니다,하지만 난에서 GKEntity.entity
로 엔티티를 액세스하려고하면 연결된 노드이면 nil을 반환합니다. 노드는 GKScene
엔티티의 GKSKNodeComponent.node
에 액세스하여 연결됩니다.
어떻게 예상대로 자동으로 SKNode
의 entity
속성을 업데이트 할 GKSKNodeComponent
및 GKScene
을받을 수 있나요? 다른 사람이 문제로 실행되는 경우
'newTowerScene'을 계속 사용하고 있습니까, 아니면 범위를 벗어나거나 노드의'엔티티 '를 찾을 때까지 할당을 취소 할 수 있습니까? 그 속성은 약하며 엔티티는'GKScene'에 의해 소유됩니다. 그래서 엔티티 목록을 저장하지 않고 장면을 처리하면 엔티티는 사라지고 약한 참조는 사라집니다. – rickster
고마워, @rickster! 나는'SKScene' 서브 클래스의 속성을 통해'GKScene'을 유지하지만'GKScene'을 초기화 한 직후에 중단 점을 설정하더라도 동일한 동작이 관찰됩니다. –