今天用spritekit作了一個小遊戲,很好用是很好用可是很是困惑的是裏面居然沒有從上次更新到如今的時間差傳入方法中,這樣的話,我想在update方法中實現每兩秒發射一個子彈的功能就變得很差辦。只能僞造一個時間差了,
首先明確概念是update方法是一秒更新60次,因此須要圍繞這個來進行編。
定義兩個屬性:
@property (nonatomic) NSTimeInterval lastSpawnTimeInterval;
@property (nonatomic) NSTimeInterval lastUpdateTimeInterval;ios
第一個屬性是紀錄上一次更新的時間,這個時間會累加,後面詳細講
第二個屬性是在update中紀錄更新的頻率的上一次時間
而後在單獨寫一個方法在update中會調用它,lastSpawnTimeInterval 會累加上次到如今的時間差,當它大於1的時候(假設是1,隨咱們的便幾均可以,控制更新秒數),就讓lastSpawnTimeInterval歸0而且執行咱們的方法。
- (void)onesecondshoot:(CFTimeInterval)timeSinceLastatom
{
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平臺。it