В настоящее время я работаю над игрой, в которой я добавляю CCSprite к сцене (анимированный призрак) и заставляю его перемещаться из случайно сгенерированной точки в другую случайно сгенерированную точку, исчезать и затем удаляться изсцена.Когда игрок касается призрака, к баллу добавляется 1.
Все работает прекрасно, но я хочу, чтобы это действие повторялось до тех пор, пока не будет выполнено условие (в частности, когда счет достигнет 50).Я не могу найти лучший способ сделать это.Каждый раз, когда я пытаюсь запустить цикл, он повторяется бесконечно и вылетает из игры.
Каков наилучший способ добиться такой петли?Я слышал упоминание о создании массивов для спрайтов, но за один раз на сцене будет только одна итерация призрака.Есть ли другие способы достижения этого?
В идеале, я хочу достичь: выполнить действия, дождаться их завершения, а затем запустить их снова, пока счет не станет равным 50.
Вот мой код:
-(void) ghostSpawner {
CGPoint endPoint = [self randomPointGenerator];
[self birthGhost];
CCSprite * Ghost = (CCSprite *) [self getChildByTag:2];
//...then fade him in
CCFiniteTimeAction *ghostBegin = [CCSequence actions:[CCDelayTime actionWithDuration:1],[CCTintTo actionWithDuration:0 red:0 green:0 blue:0],[CCTintTo actionWithDuration:.5 red:255 green:255 blue:255], nil];
//...move him over a given amount of time, then fade him out and DIE
CCFiniteTimeAction *ghostEnd = [CCSequence actions:[CCMoveTo actionWithDuration:2 position:endPoint],[CCTintTo actionWithDuration:1 red:0 green:0 blue:0],[CCCallFunc actionWithTarget:self selector:@selector(killGhost)], nil] ;
[Ghost runAction:[CCRepeatForever actionWithAction:[CCSequence actions:ghostBegin,ghostEnd, nil]]];
}
Для генерации спрайта:
-(void) birthGhost {
CGPoint spawnPoint = [self randomPointGenerator];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"ghostidle.plist"];
CCSprite * Ghost = [CCSprite spriteWithSpriteFrameName:@"Ghost0001.png"];
[Ghost setColor:ccc3(0,0,0)];
Ghost.anchorPoint = ccp(.5, .5);
Ghost.position = spawnPoint;
Ghost.anchorPoint = ccp(0.5f,0.5f);
Ghost.scale = .4;
Ghost.tag = 2;
[Ghost runAction:ghostIdleAnimation()];
[self addChild:Ghost z:0];
}
Функция 'ghostSpawner' вызывается в моем init'е на сцене
[self ghostSpawner];
Надеюсь, этого достаточно.Любой отзыв будет потрясающим, так как это один из моих первых настоящих проектов для iPhone.Заранее спасибо!