2016-09-16 2 views
1

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에 액세스하여 연결됩니다.

어떻게 예상대로 자동으로 SKNodeentity 속성을 업데이트 할 GKSKNodeComponentGKScene을받을 수 있나요? 다른 사람이 문제로 실행되는 경우

+0

'newTowerScene'을 계속 사용하고 있습니까, 아니면 범위를 벗어나거나 노드의'엔티티 '를 찾을 때까지 할당을 취소 할 수 있습니까? 그 속성은 약하며 엔티티는'GKScene'에 의해 소유됩니다. 그래서 엔티티 목록을 저장하지 않고 장면을 처리하면 엔티티는 사라지고 약한 참조는 사라집니다. – rickster

+0

고마워, @rickster! 나는'SKScene' 서브 클래스의 속성을 통해'GKScene'을 유지하지만'GKScene'을 초기화 한 직후에 중단 점을 설정하더라도 동일한 동작이 관찰됩니다. –

답변

0

...

은 내가 로딩 후 GKScene에 연결된 노드와 엔티티를 추가 한 경우, 노드의 entity 속성이 제대로 설정 한 것으로 나타났습니다.

for nextEntity in gkScene.entities 
    { 
     gkScene.removeEntity(nextEntity) 
     if let nextNode = nextEntity.component(ofType: GKSKNodeComponent.self)?.node 
     { 
      nextEntity.addComponent(GKSKNodeComponent(node: nextNode)) 
     } 
     gkScene.addEntity(nextEntity) 
    } 

이전 GKSKNodeComponent를 교체하지 않는 중, 작동하지 않는 것 : 지금, 나는 GKScene로드 한 후 실행 루프를 추가했다. 다행히도 이것은 신속하게 해결 될 버그에 대한 일시적인 수정 일뿐입니다.