【问题标题】:Load a map through an NSString通过 NSString 加载地图
【发布时间】:2012-08-03 23:58:19
【问题描述】:

我正在开发一款需要保存在多维数组中的瓦片地图的游戏。在我的游戏中,我制作了所有这些地图,这些地图都是 NSString 以及所需的所有保存值,我希望将 NSString 的所有 256 个值保存到一个 int 16x16 多维数组中。

这是我当前的代码,但它不起作用

-(void)LoadMap:(NSString*)mapString
{
    for(int h = 0; h < kMapSize; h++)
    {
        for(int w = 0; w < kMapSize; w++)
        {
            map[w][h] = [[mapString substringWithRange:NSMakeRange((h)+(w*kMapSize), 1)] intValue];
        }

    }

}

任何帮助都会非常感谢你:)

【问题讨论】:

  • 会发生什么而不是您所期望的?运行时异常?编译错误?结果数据不正确?蓝屏?猪飞?靠结果跑?通常,找出编程问题的关键在于某些“不工作”的具体细节。
  • 您是否在询问如何标记 NSString 中的每个值并在您的多数组中使用它?
  • 有一个运行时错误,表示带有范围的子字符串正在尝试获取不存在的数据

标签: iphone objective-c


【解决方案1】:

有两个潜在的错误:

  • kMapSize 可能不等于 16。这个变量有一个误导性的名称,因为不经意的读者会认为它应该是 256。也许将其重命名为 kMapWidth
  • mapString 的长度可能不是 256 个字符。您可能需要在LoadMap 的开头检查[mapString length]

【讨论】:

  • 我觉得很愚蠢,但是是的,字符串短于 256 个字符
【解决方案2】:

以下代码可以正常工作。也许第二行是错误的原因。

// initial data
NSInteger kMapSize = 3;
char map[3][3];   <-- this row ?
NSString *mapString = @"000111222";

// put initial data into 'map' array
for(int h = 0; h < kMapSize; h++) {
    for(int w = 0; w < kMapSize; w++) {
        map[w][h] = [[mapString substringWithRange:NSMakeRange((h)+(w*kMapSize), 1)] intValue];
    }
}

// confirm whether the data is stored successfully
for (int h = 0; h < kMapSize; h++) {
    for (int w = 0; w < kMapSize; w++) {
        NSLog(@"%d", map[w][h]);
    }
}

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2015-02-26
    • 1970-01-01
    • 2017-06-22
    • 2021-04-02
    • 2012-04-15
    相关资源
    最近更新 更多