错误索引超出范围

时间:2014-06-11 13:13:16

标签: cocos2d-iphone nsmutablearray ccsprite

    -(id) init
    {
      if( (self=[super init])) {
        _targets = [[NSMutableArray alloc] init];
        temp = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4",nil];
        tempArray = [[NSMutableArray alloc] initWithArray:temp];
        resultArray = [[NSMutableArray alloc] init];
        [self thelogic];
      }
  return self;
    }

    -(void)thelogic
    {
      int i;
      int count = 4;
      for (i = 0; i < 3; i ++) {
      int index = arc4random() % (count - i);
      [resultArray addObject:[tempArray objectAtIndex:index]];
      CCSprite *target = [CCSprite spriteWithFile:[NSString stringWithFormat:@"%@.png",  [tempArray objectAtIndex:index]]];
      target.tag = [[NSString stringWithFormat:@"%@",[tempArray objectAtIndex:index]] integerValue];
      [self addChild:target];
      [_targets addObject:target];
      [tempArray removeObjectAtIndex:index];
     }
    }

    -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      [_targets removeAllObjects];
      [self thelogic];
    }

从上面的代码中,我得到三个不同的数字,当他们进入这个场景时,他们制作了三个具有不同图像的精灵,我想要触摸屏幕,三个旧的精灵将被删除,三个新的精灵将会显示,但是up代码总是崩溃,所以我该如何解决?感谢

1 个答案:

答案 0 :(得分:1)

很难理解您在theLogic方法中尝试做什么,但我建议您更换

 int index = arc4random() % (count - i);

 int index = arc4random() % [tempArray count];

这将解决崩溃问题,但我怀疑您的程序是否会按预期运行。实际上,您只在init方法中填充tempArray;第一次调用theLogic将删除它的所有元素,据我所知,数组不再填充。因此,当您调用ccTouchesBegan然后调用theLogic时,tempArray将为空。

很抱歉,如果我错过任何积分。