增加 Sprite Kit 游戏的难度
Increasing difficulty of a Sprite Kit game
我有一个用 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
。
您不应向 addPlayer 操作添加时间间隔,而应创建一个更新操作,该操作将每隔一段时间调用一个更新方法,然后在该函数内部具有添加玩家的逻辑。
例如,如果您将计时器设置为每 0.1 秒 运行,您可以创建一个计数器变量来查看有多少 "updates" 已经过去,然后有一个 "difficulty"变量以确定您要添加玩家的更新次数。
伪代码:
-(void)update{
counter+=1;
if(counter%difficulty == 0)
{
addPlayer();
}
}
这样您就可以将所有逻辑放在一个地方并基于相同的 "update" 时间表。 3次更新后可以添加敌人,5次更新后可以更换背景等等
您可以使用SKScene
的update
功能来添加球员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
。
SKAction *increaseDifficultyAction = [SKAction
sequence:@[[SKAction waitForDuration:1.0],
[SKAction runBlock:^{
difficulty -= 0.01;
}]]];
[self runAction:[SKAction repeatActionForever:increaseDifficultyAction]];
我有一个用 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
。
您不应向 addPlayer 操作添加时间间隔,而应创建一个更新操作,该操作将每隔一段时间调用一个更新方法,然后在该函数内部具有添加玩家的逻辑。
例如,如果您将计时器设置为每 0.1 秒 运行,您可以创建一个计数器变量来查看有多少 "updates" 已经过去,然后有一个 "difficulty"变量以确定您要添加玩家的更新次数。
伪代码:
-(void)update{
counter+=1;
if(counter%difficulty == 0)
{
addPlayer();
}
}
这样您就可以将所有逻辑放在一个地方并基于相同的 "update" 时间表。 3次更新后可以添加敌人,5次更新后可以更换背景等等
您可以使用SKScene
的update
功能来添加球员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
。
SKAction *increaseDifficultyAction = [SKAction
sequence:@[[SKAction waitForDuration:1.0],
[SKAction runBlock:^{
difficulty -= 0.01;
}]]];
[self runAction:[SKAction repeatActionForever:increaseDifficultyAction]];