【问题标题】:GamePlayKit GKObstacleGraph save and loadGamePlayKit GKObstacleGraph 保存和加载
【发布时间】:2016-09-15 16:57:49
【问题描述】:

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

【问题讨论】:

    标签: gameplay-kit


    【解决方案1】:

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


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

    【讨论】:

    • 我尝试使用 NSAtchiever(未键入),但它对我抛出了异常:-(
    • KeyedArchiever 相同
    • 您使用的是 iOS 9 / tvOS 9 / OS X 10.11 吗?归档支持仅在今年的版本(iOS 10 / tvOS 10 / macOS 10.12)中添加到 GKGraph 类集群。
    • 我在 10.11,哦,你的意思是如果我将目标更改为 10.12,我将获得存档器?您能否确认它在 10.12 上有效?好吧,那我就等上映了……
    • 那么它也会符合 NSCopying 吗?有记录吗?
    猜你喜欢
    • 2019-11-08
    • 2012-01-30
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多