0

我有一些关于 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

4 回答 4

2

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

于 2013-05-22T18:12:50.690 回答
1

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

于 2013-05-22T18:18:15.487 回答
0

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

NSNumber (integer, float, boolean)
NSString
NSArray
NSDictionary

无论您想保存/加载什么,您都应该组织您的数据以仅使用这些类型。不支持直接使用NSValue,所以你需要做这样的事情。

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

并保存字典。此外,您还可以使用主要为Property List设计的等效的新文字语法

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

这相当于上面的例子。

CAVEAT :当您将数据保存到 JSON 或Property List时,所有键都NSDictionary必须是。NSString

考虑使用属性列表

如果您只针对 iOS,属性列表始终是保存/加载少量变量的正确和更好的选择。Xcode 也会给你更好的编辑器。

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

背景图片

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

因此,建议仅将图像文件的路径存储在 JSON 或 PLIST 文件中 - 正如@JoelMartinez 所指出的那样 - 并直接从路径加载每个图像文件。

于 2013-05-23T04:14:34.403 回答
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];
于 2013-05-22T18:15:23.167 回答