我使用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,那么我可以调整延迟定时器或每次怪物被杀或任何地方。