增加 Sprite Kit 游戏的难度
Posted
技术标签:
【中文标题】增加 Sprite Kit 游戏的难度【英文标题】:Increasing difficulty of a Sprite Kit game 【发布时间】:2015-03-18 21:59:58 【问题描述】:我有一个用 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
。
【问题讨论】:
【参考方案1】:您可以使用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]];
【讨论】:
谢谢,它运行良好,但我想让difficulty
变量在游戏结束时重新启动。我试过这段代码,但它不起作用:SKAction *increaseDifficultyAction = [SKAction sequence:@[[SKAction waitForDuration:1.0], [SKAction runBlock:^ if (gameover == NO) difficulty -= 0.01; else difficulty = 1.0; ]]]; [self runAction:[SKAction repeatActionForever:increaseDifficultyAction]];
gameover
是一个布尔值,用于检查游戏是否结束【参考方案2】:
您应该创建一个更新操作,它会每隔一段时间调用一个更新方法,然后在该函数内部有添加玩家的逻辑,而不是向 addPlayer 操作添加时间间隔。
例如,如果您将计时器设置为每 0.1 秒运行一次,您可以创建一个计数器变量来查看有多少“更新”已经过去,然后有一个“难度”变量来确定您想要更新多少次添加播放器。
伪代码:
-(void)update
counter+=1;
if(counter%difficulty == 0)
addPlayer();
通过这种方式,您可以将所有逻辑集中在一个地方,并基于相同的“更新”时间表。您可以在 3 次更新后添加敌人,在 5 次更新后更改背景等等。
【讨论】:
以上是关于增加 Sprite Kit 游戏的难度的主要内容,如果未能解决你的问题,请参考以下文章
游戏中的三角学——Sprite Kit 和 Swift 教程