因此,在我的“游戏结束”场景中,我想像一些游戏那样对得分进行动画计数。我写了一个这样的方法:
-(void)animateScoreNumberLabel{
if ([scoreNumberLabel.text integerValue]<SCORE) {
[self runAction:[SKAction waitForDuration:.001f]completion:^{
[self incrementScoreNumberLabel];
[self animateScoreNumberLabel];
}];
}
}
它有效,但似乎在.01f
等待时间“顶部” - A.K.A.,我无法让动画以每秒100“增量”的速度运行。对于平均得分在3000到10000之间的游戏,显然我不能让人们在30-100秒内看到他们的满分。
有更好的方法吗?我假设它可能与if
语句有关?
编辑:我也试过了这个:
if ([scoreNumberLabel.text integerValue]<SCORE) {
[self runAction:[SKAction runBlock:^{
[self incrementScoreNumberLabel];
[self animateScoreNumberLabel];
}]];
}
它几乎没有变得更快 - 看起来我需要增加1以上才能做到这一点,因为它根本不够快。但是,确保增量器不超过实际分数会变得有点麻烦...... Bleh。
答案 0 :(得分:1)
您的用户无法以60fps(最常见的显示刷新率)感知单位数增量,而spriteKit似乎被锁定为the devices native refresh rate(这是有意义的)。
正如您所指出的那样,最终得分有很大的机会,这可能让用户等待。
多年前,在街机游戏机上解决了这个问题。试试这个:
update:
SKScene
方法的分数
醇>
您可以使用一个基本的缓出功能,该功能可以快速启动,然后减慢最后几位数(当然,您可以使用轻松功能,即在增加总数时加快速度)。
NB。此方法还可以避免用户设备与您期望的帧速率相匹配的问题。