GamePlayKit GKObstacleGraph 保存和加载

GamePlayKit GKObstacleGraph save and load

可以将 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:]: unrecognized selector sent to instance 0x6180000432d0

GKObstacleGraphGKGraph, which (as of macOS 10.12, iOS 10, and tvOS 10) declares conformance to the NSCoding protocol. That means you can serialize one to data or a file (and deserialize to create an instance from a file) using NSKeyedArchiver (and NSKeyedUnarchiver 的子 class) 就像您可以为支持 NSCoding.

的任何其他对象一样

有关存档的一般信息(适用于任何 NSCoding 兼容 class),请参阅 Apple 的 Archives and Serializations Programming Guide

此外,在Xcode 8(部署到macOS 10.12、iOS 10或tvOS 10时),您可以创建GKGraphs 在可视化编辑器中与您的 SpriteKit 场景一起使用。当你这样做时,你使用 GKScene class 从 .sks 文件 Xcode 写入。


在旧的 OS 版本中,GKGraph 系列不支持 NSCoding。但是,重建 GKObstacleGraph 所需的所有信息都可以公开访问。因此,您可以通过读取图形的缓冲区半径和障碍列表,以及读取每个障碍的顶点列表来实现自己的序列化。随心所欲地将该信息写入文件...然后当您想要重建图形时,从您保存的顶点创建 GKPolygonObstacle,并从这些障碍和您保存的缓冲区创建一个新的 GKObstacleGraph半径.