2010-04-23 87 views
1

我使用cocos2d在iPhone上製作遊戲,並且我有一個問題。
在我的init方法我這樣做:我們可以動態改變「時間表」的間隔嗎?

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

它創建一個新的怪物每一秒。
但我希望間隔隨時間變化。例如:

  • 遊戲的前10秒:每1秒出現一個新怪物。
  • 然後持續10秒:每0.8秒出現一個新怪物。
  • 而每0.5秒後...

我怎麼能這樣做?

謝謝!

回答

1

您可能試試這個(我從@bddckr複製了一些代碼)

初始時間:

self.monsterSpawnStartDate = [NSDate date]; 
self.lastTimeScheduledBefore = 0;//new var 

計劃方法來創建怪物

- (void)scheduledMethod { 
    NSTimeInterval seconds = [[NSDate date] timeIntervalSinceDate:monsterSpawnStartDate]; 

    [self newMonster]; // Let a new monster spawn 
    if (seconds >= 20.0 && lastTimeScheduledBefore == 10){ 
     [self unschedule:@(scheduledMethod)]; 
     [self unschedule:@(scheduledMethod) interval:0.5]; 
     lastTimeScheduledBefore = 20; 
    } 
    else if (seconds >= 10.0 && lastTimeScheduledBefore == 0){ 
     [self unschedule:@(scheduledMethod)]; 
     [self unschedule:@(scheduledMethod) interval:0.8] 
     lastTimeScheduledBefore = 10; 
    } 
} 

您可以修改它作爲您的需要。如果經過一個週期,您可以使用mod

1

將一個實例變量和NSDate的屬性稱爲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這樣的:

- (void)adjustMonsterSpawnRate { 
    NSTimeInterval seconds = [[NSDate date] timeIntervalSinceDate:monsterSpawnStartDate]; 
    if (((seconds <= 10.0) && (seconds % 1.0)) || ((seconds <= 20.0) && (seconds % 0.8)) ((seconds > 20.0) && (seconds % 0.5))) 
     [self newMonster]; // Let a new monster spawn 
} 
0

我想一個更好的選擇是使用預定函數用於計時,並使用累計時間觸發敵人創建如下

self.time_since_last_monster = 0 [自時間表:@selector(new_monster :)間隔: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 
    } 
} 

這會給予更多的靈活性。

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,那麼我可以調整延遲定時器或每次怪物被殺或任何地方。

相關問題