我有一个使用Sprite Kit制作的游戏,它有一个执行方法的SKAction,并以一个时间间隔永久地重复它:
_action = [SKAction sequence:@[
[SKAction waitForDuration:difficulty],
[SKAction performSelector:@selector(addPlayer) onTarget:self]]];
[self runAction:[SKAction repeatActionForever:_action] withKey:playerKey];
但我希望时间间隔每秒减少0.01秒,为此我使用了计时器:
difficultyTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(decrease) userInfo:nil repeats:YES];
重复这种方法:
- (void)decrease {
difficulty -= 0.01;
NSLog(@"Difficulty: %.2f", difficulty);
}
我尝试将difficulty
设置为浮动和NSTimeInterval,但计时器不会影响SKAction -waitForDuration
。
答案 0 :(得分:0)
您应该创建一个更新操作,而不是在addPlayer操作中添加时间间隔,该操作会经常调用更新方法,然后在该函数内部具有添加播放器的逻辑。
例如,如果您设置一个计时器每0.1秒运行一次,您可以创建一个计数器变量来查看有多少"更新"已经过去,然后有一个"难度"变量,用于确定要添加播放器的更新次数。
PSUEDO CODE:
-(void)update{
counter+=1;
if(counter%difficulty == 0)
{
addPlayer();
}
}
通过这种方式,您可以将所有逻辑集中在一个地方并基于相同的"更新"时间表。您可以在3次更新后添加敌人,在5次更新后更改背景等等。
答案 1 :(得分:0)
您可以使用update
的{{1}}功能添加更改SKScene
的玩家。每个帧调用waitDuration
方法,并以update
为参数。我们可以使用计算最后currentTimeInterval
次呼叫和当前帧之间经过的时间。如果它等于addPlayer
等待时间,那么我们将再次更新它。
首先像这样创建一个difficulty
property
然后在@property (nonatomic) NSTimeInterval lastAddPlayerTime;
函数
update
您还可以创建重复-(void)update:(NSTimeInterval)currentTime
{
if (currentTime - self.lastAddPlayerTime >= difficulty) {
self.lastAddPlayerTime = currentTime;
[self addPlayer];
}
}
以每秒减少SKAction
。
difficulty variable