Objective-c - > iphone设计:延迟动作

时间:2010-09-23 13:43:20

标签: iphone objective-c methods sparrow-framework

很抱歉打扰了,但是我有点发脾气,我想知道这里是否有人可以帮助我。

我目前正在设计一款游戏,其中敌人出现在屏幕的左侧(超出界限)并向右移动。我使用了许多代码(这是使用Sparrow框架),并且当你击败它们时,几乎所有的敌人都会增加。即lvl 1-> 1敌人,lvl 2-> 2个敌人,lvl3-> 3个敌人等...

我在制造敌人时遇到了一些麻烦。我让它们出现在5个设置路径中的1个(NSMutableArray中的路径号),由随机数生成器选择,但它们通常出现在同一路径上,1在另一个路径上。

为了生产敌人,我运行了多种方法: addEnemy - >产生敌人(动画),然后从左到右。 onTouchEnemy - >如果我碰到敌人,他们就会死。激活drawEnemies drawEnemies - >调用addEnemy的次数等于你的lvl。编码为:

for(int i = 0; i < level; i++){
  [self performSelector:@selector(addEnemy) withObject:nil afterDelay:3.0];
}

有没有办法进行编程,以便在激活产生敌人的方法之间有延迟?我试过这个afterDelay,但由于某种原因,该程序只是忽略了3秒的延迟,只是在1中产生敌人。这是相当恼人的,因为我希望它们以更有序的方式出现。

我感谢愿意帮助我的人。 Sjkato。

3 个答案:

答案 0 :(得分:2)

你的意思是这样做,最后额外加上“* i”吗?像这样:

for(int i = 0; i < level; i++){
    [self performSelector:@selector(addEnemy) withObject:nil afterDelay:3.0 * i];
}

答案 1 :(得分:2)

由于代码执行的方式,

performSelector:withObject:afterDelay:似乎忽略了它的延迟。 for循环将几乎立即迭代,排队3次调用addEnemy方法。 3秒后,addEnemy方法几乎全部同时执行。

要获得更好的结果,您应该查看NSTimer。您可以设置3秒的间隔并告诉它重复(您可以在生成所需数量的敌人后使计时器无效)。

类似的东西:

// creates and returns a new timer
// the timer is retained by the run loop for as long as it is valid
// invalidating the timer will cause the runloop to release it.
myTimer = [NSTimer scheduledTimerWithTimeInterval:3.0
                                 target:self
                               selector:@selector(addEnemy)
                               userInfo:nil
                                repeats:YES];

这将导致addEnemy方法每3秒触发一次。你应该记录你已经制造了多少敌人,并在最后一个之后,停止计时器,使其不再发射。

if (numberOfDesiredEnemies == numberOfEnemiesProduced)
{
    [myTimer invalidate], timer = nil;
}

答案 2 :(得分:0)

尝试查看NSTimer课程。
有一些方法可以执行具有预定义延迟和循环条件的选择器。