Objective-C - Json for Game或者有更好的方法

时间:2013-05-22 18:02:06

标签: objective-c

我对json有一些疑问!我希望有人可以帮助我!

我创建了一个游戏,现在我想将一些变量从我的游戏变成一个json文件!

所以我想问一下,是否有可能带浮标和数组

NSArray *points = [NSArray arrayWithObjects:
            [NSValue valueWithCGPoint:CGPointMake(50.0, 150.0)],
            [NSValue valueWithCGPoint:CGPointMake(350.0, 300.0)],nil];

进入json文件?!

另外,我想在json文件中为不同级别提供背景图像。

是否可以使用json或任何人知道更好的方法。

如果有人能告诉我的话会很棒。或者任何人都知道一个很好的教程?!

由于

4 个答案:

答案 0 :(得分:2)

如果您不必序列化对象以在不同环境之间移动,那么我就不会打扰JSON ...如果您正在使用Web服务或其他东西,那么它们很棒...如果您有它们在值中,我会将它们存储在plist中,假设您没有交换。

答案 1 :(得分:1)

要回答有关背景图像的问题......您只需将文件名/路径存储到图像中即可。这样,多个文件或级别可能会引用同一资产。

答案 2 :(得分:0)

JSON支持哈希(字典)和数组作为容器,它们可以包含哈希,数组,数字,字符串和布尔值。因此,要捕获这些数据,您可能会有这样的结构:

{
  "points":[
    [50.0, 150.0],
    [350.0, 300.0]
  ]
}

用这样的东西读回来:

NSArray *pointsData = [json objectForKey:@"points"];
NSArray *points = [NSArray arrayWithObjects:
                    [NSValue valueWithCGPoint:CGPointMake(
                      [[pointsData objectAtIndex:0] objectAtIndex:0],
                      [[pointsData objectAtIndex:0] objectAtIndex:1]
                    )],

                    [NSValue valueWithCGPoint:CGPointMake(
                      [[pointsData objectAtIndex:1] objectAtIndex:0],
                      [[pointsData objectAtIndex:1] objectAtIndex:1]
                    )],

                    nil];

答案 3 :(得分:0)

Cocoa在其JSON支持中仅支持这些类型。

NSNumber (integer, float, boolean)
NSString
NSArray
NSDictionary

无论您想要保存/加载什么,都应该将数据组织为仅使用这些类型。不支持直接使用NSValue,因此您需要制作类似的内容。

NSDictionary* point = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:444f],
@"x",
[NSNumber numberWithFloat:555f],
@"y",
nil];

并保存字典。 此外,您还可以使用主要为属性列表设计的等效new literal syntax

NSDictionary* point = @{ @"x" : @444f, @"y": @555f };

这与上面的例子相同。

CAVEAT :将数据保存到JSON或属性列表时,NSDictionary的所有键都必须为NSString

考虑使用属性列表

如果您只定位iOS,Property List始终是正确的,也是保存/加载少量变量的更好选择。 Xcode也会为你提供更好的编辑器。

在Cocoa中对JSON的支持只是 Property List 的一个子集,而且大部分都是类似的。因此,首先查看属性列表,然后您将能够轻松地使用PLIST或JSON。 (这就是为什么Cocoa中没有JSON的指导文件)

背景图片

可以将图像数据保存在JSON或Property List中,但通常不建议这样做。因为JSON或PLIST需要立即加载。这意味着必须将所有文件内容加载到内存中。如果将多个图像放在JSON或PLIST文件中,它将容易变大到多兆字节。 iOS设备没有太多内存,因此您的程序可能会崩溃。

因此建议仅在JSON或PLIST文件中存储路径到图像文件 - 就像@JoelMartinez指示的那样 - 并直接从路径加载每个图像文件。