2016-09-15 109 views
0

GKObstacleGraph可以保存到文件並從那裏加載嗎? 我無法找到任何東西。GamePlayKit GKObstacleGraph保存並加載

我很想保存和加載我的水平預先計算的圖表。

我已經試過到目前爲止

NSArray * obstacles = [SKNode obstaclesFromNodePhysicsBodies:arrayOfBodies]; 
_graph = [GKObstacleGraph graphWithObstacles:obstacles bufferRadius:[(BaseUnit *)[_units firstObject] size].width/2]; 
[NSKeyedArchiver archiveRootObject:_graph toFile:@"/Users/roma/Desktop/myGraph.graph"]; 

但是,這是我得到:

- [GKObstacleGraph encodeWithCoder:]:無法識別的選擇發送到實例0x6180000432d0

回答

0

GKObstacleGraph是其中(截至macOS 10.12,iOS 10和tvOS 10)宣佈符合NSCoding協議。這意味着您可以使用NSKeyedArchiver(和NSKeyedUnarchiver)將數據或文件序列化爲數據或文件(並反序列化以從文件創建實例),就像支持NSCoding的任何其他對象一樣。

有關歸檔的一般信息(適用於任何兼容NSCoding的類),請參閱Apple的Archives and Serializations Programming Guide。另外,在Xcode 8中(部署到macOS 10.12,iOS 10或tvOS 10時),您可以在可視化編輯器中創建GKGraph以與您的SpriteKit場景配合使用。當你這樣做時,你使用GKScene類從Xcode寫入的.sks文件加載SpriteKit場景和GK對象(它可以包括不僅僅是尋路圖,還包括實體/組件信息)。


在舊的OS版本中,GKGraph家人不支持NSCoding。但是,您需要重建GKObstacleGraph的所有信息均可公開訪問。因此,您可以通過讀取圖形的緩衝區半徑和障礙物列表並讀取每個障礙物的頂點列表來實現自己的序列化。把這些信息寫到一個文件中,不過你喜歡......然後當你想重建一個圖形時,從你保存的頂點創建GKPolygonObstacle秒,並從這些障礙物和你保存的緩衝半徑創建一個新的GKObstacleGraph

+0

我試圖用NSAtchiever(未鍵控),它在我在iOS扔異常:-( – ColdSteel

+0

同爲KeyedArchiever – ColdSteel

+0

你9/tvOS 9/OS X 10.11歸檔支持加入到'GKGraph'類?羣集只在今年的發佈(iOS 10/tvOS 10/macOS 10.12) – rickster