Sprite kit 每秒間隔 update 頻率偽造

SQC發表於2014-01-21

今天用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平臺。

相關文章