检查程序是否卡在循环中

时间:2012-06-26 17:39:32

标签: iphone objective-c loops cocos2d-iphone

好的......所以我会在课堂上随机生成一个级别,然后将其传递给游戏。

问题在于,当我生成关卡时,它有时会卡在循环中(由于我生成它时的检查)。我试图通过修改代码来减少冻结次数。但如果是这样的话,它仍然会被卡在1~2%之内。

在RandomLevel中的

我有这个:

-(void)positionMonsters:(int)nrM{

int nrH=[randomHero count];

int rdm;
CGPoint randPt;
BOOL is;



while ([randomMonsters count]!=nrM) {
    rdm=arc4random()%(nrH-1);

    if (rdm!=nrH-1) {
    randPt=random_on_line([[randomHero objectAtIndex:rdm]position], [[randomHero objectAtIndex:rdm+1]position ], CCRANDOM_0_1());
    }else{
    randPt=random_on_line([[randomHero objectAtIndex:rdm]position], [[randomHero objectAtIndex:0]position ], CCRANDOM_0_1());
    }

    is=NO;
    for (Monster *mob in randomMonsters) {
        if (ccpFuzzyEqual(randPt, mob.position, 40)) {
            is=YES;
            break;
        }
    }

    if (!is) {
        Monster *mob=[[Monster alloc]initWithPosition:randPt];
        [randomMonsters addObject:mob];
    }




}

}

让我引导您完成代码:

所以我得到了英雄的数量(那里有多少),只要没有我想要制作的怪物,我选择了两个连续英雄之间的随机线并在该线上生成一个点,然后我检查生成的点是否接近任何其他(我不想重叠)..如果是,那么它再次开始循环,如果它不是我将它添加到随机小怪

当我检查怪物是否与另一个重叠时,它会被卡住......但是我不应该因为这些英雄总是至少相隔200 px而且我只会制造一小群怪物。

在我的GameScene中,我这样做:

-(id)init{
//stuff stuff
RandomLevel *rlv=[[RandomLevel alloc]initWithHeros:6 andMonsters:6]; *****

heros=rlv.randomHeros;
mobs=rlv.randomMonsters;
}

我想要的是停止/取消*****行并尝试再次获得一个随机级别...正如我所说的......这只发生了1%的情况所以它不会如果游戏"冻结"那就太大了每周2秒..或某事

2 个答案:

答案 0 :(得分:1)

如果处理时间超过0.5秒,这样的事情就会突破你的循环。当然,您可以根据具体情况对其进行修改。

NSDate* myTime= [NSDate date];
while (true)
{
   ...

   if ([myTime timeIntervalSinceNow] < -0.5])
   {
       break;
   }
}

答案 1 :(得分:1)

你可以使用performSelector:withDelay并在循环中取消它吗?