【问题标题】:Need help looping through text file in Objective-C instead of looping through multidimensional array to display CCSprites需要帮助在 Objective-C 中循环文本文件,而不是通过多维数组循环显示 CCSprites
【发布时间】:2010-03-17 05:37:23
【问题描述】:

我有一个关于我正在开发的 iPhone 游戏的问题。目前,下面是我正在使用的代码,目前我循环遍历我的多维数组并在我的场景中相应地定位砖块。而不是按照以下(gameLevel1)在我的代码中包含多个二维数组。

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

请考虑到我希望我的游戏中有多个关卡(可能是 20 个),因此我的文本文件必须有某种分隔线项目来确定我要渲染的关卡。

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

例如基于分隔符调用level的方法?

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

方法用法:

[self renderLevel:@"#LEVEL_ONE"];

例如文本文件示例?

#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];
  }
}

【问题讨论】:

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


    【解决方案1】:

    将每个级别放在一个单独的文件中会加快加载速度,尤其是对于更高级别的加载,会提供更大的灵活性,并且可能会更容易实现。这些点只是您计划使用的关卡数量的学术点。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        相关资源
        最近更新 更多