0

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

4

1 回答 1

0

GKObstacleGraph是 的子类GKGraph,它(从 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在可视化编辑器中创建 s 以配合您的 SpriteKit 场景。当您这样做时,您使用GKScene.sks类从Xcode 写入的文件中加载 SpriteKit 场景和 GK 对象(不仅可以包括寻路图,还可以包括实体/组件信息) 。


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

于 2016-09-15T18:40:24.123 回答