【问题标题】:Writing and Reading Objects from Resource Files IOS从资源文件 IOS 写入和读取对象
【发布时间】:2012-04-28 14:40:17
【问题描述】:

我正在为我的游戏制作关卡编辑器。我已经使用 cocos2d 制作了游戏。我有一个关卡节点,它是 CCNode 的子类,包含游戏中的所有关卡对象。然后该级别被添加到 CCLayer。我想将关卡的所有子级(一个 NSMutableArray)保存到资源文件夹中的一个文件中。我想加载这个 NSMutableArray,循环遍历它,然后将所有保存的关卡对象添加到关卡中。我无法将这些关卡对象保存在本地设备上,因为最终游戏中的关卡将基于此文件,并且其他设备需要将其与所有其他游戏资源一起准备好。有什么方法可以做到这一点,还是我只需要保存包含关卡对象所有属性的字符串并在这些字符串中搜索加载关卡所需的信息?如果是这样,有没有办法结合 NSString 读取和写入 c 结构到文件?这是我目前所拥有的:

        NSString * filePath = @"LevelSaves.txt";
        NSString * fileRoot = [[NSBundle mainBundle]pathForResource:filePath      ofType:@"txt"];
        NSString * fileContents = [NSString stringWithContentsOfFile:fileRoot encoding:NSUTF8StringEncoding error:nil];
        NSArray * allLinedStrings = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
        ObjectFactory * objFactory = ObjectFactory::sharedObjectFactory();
        for (NSString * curString in allLinedStrings) {
            NSArray * seperatedString = [curString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@";"]];
            NSString * objectID = (NSString*)[seperatedString objectAtIndex:0];
            NSArray * properties = (NSArray*)[seperatedString objectAtIndex:1]; //not really sure about this part. Haven't tried saving anything there yet.
            objFactory->createObject(objectID,properties);

【问题讨论】:

    标签: objective-c serialization file-io cocos2d-iphone


    【解决方案1】:

    您不能将数据保存在应用程序包中(我相信这就是您所说的“资源”文件夹)。您可以将它们保存在应用程序的NSDocumentDirectory 中,如果您的对象符合NSCoding,则可以使用NSKeyedArchiver 对其进行序列化。

    进行上述调试,完成关卡编辑后,将其捆绑发布并使用NSKeyedUnarchiver 进行反序列化。

    【讨论】:

    • 谢谢,这让我的工作轻松多了。但是如何在 NSDocumentDirectory 中捆绑文档以进行发布?
    • 对于发布,您希望它们包含在应用程序包中。如果你想允许用户编辑关卡,你可以在文档目录中写出整个节点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多