我使用cocos2d在iPhone上製作遊戲,並且我有一個問題。
在我的init方法我這樣做:我們可以動態改變「時間表」的間隔嗎?
[self schedule:@selector(newMonster:) interval:1];
它創建一個新的怪物每一秒。
但我希望間隔隨時間變化。例如:
- 遊戲的前10秒:每1秒出現一個新怪物。
- 然後持續10秒:每0.8秒出現一個新怪物。
- 而每0.5秒後...
我怎麼能這樣做?
謝謝!
我使用cocos2d在iPhone上製作遊戲,並且我有一個問題。
在我的init方法我這樣做:我們可以動態改變「時間表」的間隔嗎?
[self schedule:@selector(newMonster:) interval: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
。
將一個實例變量和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
}
我想一個更好的選擇是使用預定函數用於計時,並使用累計時間觸發敵人創建如下
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
}
}
這會給予更多的靈活性。
我很愚蠢的,所以這裏就是我想要做的:在
。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,那麼我可以調整延遲定時器或每次怪物被殺或任何地方。