需要帮助在Objective-C中循环遍历文本文件,而不是循环遍历多维数组以显示CCSprites

时间:2010-03-17 05:37:24

标签: iphone objective-c matrix multidimensional-array cocos2d-iphone

我对我正在开发的iPhone游戏有疑问。目前,下面是我正在使用的代码,目前我循环遍历我的多维数组并相应地在我的场景中定位砖块。而不是在我的代码中有多个二维数组,如下所示(gameLevel1)。

理想情况下,我想从项目中的文本文件中读取并循环显示其中的值。

请注意我想在我的游戏中有多个级别(可能是20个),所以我的文本文件必须有某种分隔线项来确定我想要呈现的级别。

我当时正在考虑使用某种方法调用该方法,并且该方法将采用我对渲染感兴趣的级别编号。

e.g。根据分隔符调用级别的方法?

-(void)renderLevel:(NSString *)levelNumber;

方法用法:

[self renderLevel:@"#LEVEL_ONE"];

e.g。文本文件示例?

#LEVEL_ONE#
0,0,0,0,0,0,0,0,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,0,0,0,0,0,0,0,0
#LEVEL_TWO#
1,0,0,0,0,0,0,0,1
1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1
0,1,1,1,1,1,1,1,0
1,1,1,1,1,1,1,1,1
0,1,1,1,1,1,1,1,0
1,1,1,1,1,1,1,1,1
0,1,1,1,1,1,1,1,0
1,1,1,1,1,1,1,1,1
0,1,1,1,1,1,1,1,0
1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1
1,0,0,0,0,0,0,0,1

我目前正在使用的代码:

int gameLevel[17][9] = {
  { 0,0,0,0,0,0,0,0,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,0,0,0,0,0,0,0,0 }
};

for (int row=0; row < 17; row++)
{
  for (int col=0; col < 9; col++)
  {
    thisBrickValue = gameLevel[row][col];
    xOffset = 35 * floor(col);
    yOffset = 22 * floor(row);

    switch (thisBrickValue)
    {
      case 0: brick = [[CCSprite spriteWithFile:@"block0.png"] autorelease]; break;
      case 1: brick = [[CCSprite spriteWithFile:@"block1.png"] autorelease]; break;
    }
    brick.position = ccp(xOffset, yOffset);
    [self addChild:brick];
  }
}

2 个答案:

答案 0 :(得分:1)

将每个级别放在一个单独的文件中会使加载更快,特别是对于以后的级别,会提供更大的灵活性,并且可能更容易实现。对于您计划使用的级别数,这些要点仅仅是学术性的。

但是,我不确定你的问题是什么。我看到一些问号,但似乎并没有结束问题。您是否介意用实际问题更新您的问题?

答案 1 :(得分:0)

看起来你想要解析一个文件,在这个问题中回答了Objective-C:How do I parse a text file in Objective-C?

对于您的情况,我认为您需要确定每一行是“#Level X#”行还是一行块。然后你可以使用相同的componentsSeparatedByString函数(传递@“,而不是@”\ n“)来为你提供一行中所有块的数组,以添加到你自己创建的NSMutableArray中。

作为个人设计选择,我宁愿将每个级别放在一个单独的文件中。这允许将来添加/更新级别,而无需更新包含所有现有级别的文件。