我们可以动态改变“时间表”的间隔吗?

时间:2010-04-23 22:15:32

标签: iphone cocos2d-iphone

我正在使用cocos2d在iPhone上制作游戏,我有一个问题 在我的init方法中,我这样做:

[self schedule:@selector(newMonster:) interval:1];   

每秒钟创造一个新怪物 但我希望间隔随时间而变化。例如:

  • 游戏的第一秒:每1秒出现一个新怪物。
  • 然后持续10秒:每0.8秒出现一个新怪物。
  • 每0.5秒后......

我该怎么做?

谢谢!

4 个答案:

答案 0 :(得分:1)

创建名为NSDate的{​​{1}}的实例变量和属性,使其成为保留属性并进行综合。
一旦你的第一个怪物被创建,请设置它:

monsterSpawnStartDate

用这个替换你的代码:

self.monsterSpawnStartDate = [NSDate date]; // Current date and time

像这样实施[self schedule:@selector(adjustMonsterSpawnRate) interval:0.1]; // Seems like you want it to fire every 0.1 seconds

adjustMonsterSpawnRate

答案 1 :(得分:1)

答案 2 :(得分:0)

我认为更好的选择是使用预定的功能进行计时,并使用累计时间触发敌人创建,如下所示

self.time_since_last_monster = 0 [自我安排:@selector(new_monster :) interval:0.3];

-(void) new_monster:(ccTime)dt{
     self.time_since_last_monster += dt;
     if(self.time_since_last_monster > monster_interval){
          self.time_since_last_monster -= monster_interval;
          [self create_new_monster];
          // at this point based on some condition, you can now change monster_interval
     }
}

这将提供更大的灵活性。

答案 3 :(得分:0)

我很笨,所以这就是我要做的事情:

<。>在.h中设置一个浮动

float nextMonsterIn;

然后在身体

nextMonsterIn = 1.0;
[self scheduleOnce:@selector(newMonster:) interval:nextMonsterIn];
[self schedule:@selector(kickUpDifficulty:) interval:10];

- (void) newMonster : (ccTime) dt
{
    [self scheduleOnce:@selector(newMonster:) interval:nextMonsterIn];
    //-----make a monster-----
}

- (void) kickUpDifficulty : (ccTime) dt
{
      if(nextMonsterIn == 1.0)
           nextMonsterIn = 0.8;
      else if(nextMonsterIn == 0.8)
      {
           nextMonsterIn = 0.5;
           [self unschedule:@selector(kickUpDifficulty:)];
      }
}

基本上每当我调用newMonster时,我会根据当前的延迟递归重新安排newMonster,然后我可以调整计时器中的延迟或每次杀死怪物或任何地方。