今天用spritekit做了一个小游戏,很好用是很好用但是非常困惑的是里面竟然没有从上次更新到现在的时间差传入方法中,这样的话,我想在update方法中实现每两秒发射一个子弹的功能就变得不好办。只能伪造一个时间差了,
首先明确概念是update方法是一秒更新60次,所以需要围绕这个来进行编。
定义两个属性:
@property (nonatomic) NSTimeInterval lastSpawnTimeInterval;
@property (nonatomic) NSTimeInterval lastUpdateTimeInterval;
第一个属性是纪录上一次更新的时间,这个时间会累加,后面详细讲
第二个属性是在update中纪录更新的频率的上一次时间
然后在单独写一个方法在update中会调用它,lastSpawnTimeInterval 会累加上次到现在的时间差,当它大于1的时候(假设是1,随我们的便几都可以,控制更新秒数),就让lastSpawnTimeInterval归0并且执行我们的方法。
- (void)onesecondshoot:(CFTimeInterval)timeSinceLast
{
self.lastSpawnTimeInterval += timeSinceLast;
if(self.lastSpawnTimeInterval > ShootSpeed)
{
self.lastSpawnTimeInterval = 0;
[self shootLaser];
}
}
同样还需要在update方法中计算我们上次到现在的时间并传到上面的方法中去;从上次更新到现在时间差,其实就是当前时间减去上次更新的时间,之后把当前时间付给lastUpdateTimeInterval;在不到1秒的时候就直接把timeSinceLast传过去,如果大于一秒就把它设置为60分之1,然后重新来过。
CFTimeInterval timeSinceLast = currentTime - self.lastUpdateTimeInterval;
self.lastUpdateTimeInterval = currentTime;
if (timeSinceLast > ShootSpeed) {
timeSinceLast = 1.0/60.0;
self.lastUpdateTimeInterval = currentTime;
}
[self onesecondshoot:timeSinceLast];
好的,这样就完成了伪造上次更新到现在的时间差了,霍霍。
sprite kit真是很强大,估计以后写游戏会很快很好,很厉害,但是很可惜只能在ios平台。