增加Sprite Kit游戏的难度

时间:2015-03-18 21:59:59

标签: ios sprite-kit nstimer skaction

我有一个使用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

2 个答案:

答案 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