既然你有spritekit標籤明確要求。
不要在遊戲中使用NSTimer或動作來處理時間。而是使用更新功能。如果以60fps運行,這意味着更新功能將在兩秒鐘內調用120次。使用幀而不是秒來保持你的遊戲更新將會避免遊戲被滯後所改變。想象一下,例如玩家遊戲有點滯後,換句話說運行速度較慢。無論遊戲滯後,2秒還是2秒,所以現在他受膠水的影響比沒有滯後的人要少。所以...
首先你應該有一個變化保持跟蹤遊戲時間:int _time
;
在每個更新週期中,您都會添加一個:_time++
;
您應該隨時瞭解用戶何時碰到膠水的變化:int _glueTouchedAtTime
;
當用戶單擊您設置的膠水時:_glueTouchedAtTime = time
;
您應該有一個常數來定義膠水活動時間:#define GLUE_TIME 120
;
當您啓動遊戲設置_glueTouchedAtTime
到:_glueTouchedAtTime = -GLUE_TIME;
爲了防止膠水從正對時(_time == 0)
測試,如果用戶已經接觸膠水,現在是這樣工作的:
if(_glueTouchedAtTime+GLUE_TIME>time) {
// Glue is active
} else {
// Glue is not active
}
不同的膠水爲不同的精靈
要爲不同的精靈有不同的膠水我會建議先做一個普通的遊戲對象(Gam eObject)作爲SKNode或SKSpriteNode的子類,具體取決於您的需要。然後創建一個名爲GameObjectGluable的GameObject的子類。這應該有一個屬性稱爲:@property int gluedAtTime;
您可以通過膠水膠合的遊戲對象:aGameObjectGluable.gluedAtTime = time;
您現在可以測試:
if(aGameObjectGluable.gluedAtTime +GLUE_TIME>time) {
// Game Object is glued
} else {
// Game object is not glued
}
檢查的NSTimer功能......可能是適合您的情況 –
感謝所有爲我指出了正確的方向 –
使用SKAction runBlock與包裹在repeatforever waitforduration行動。不要使用NSTimer,因爲定時器在暫停視圖,場景或節點或運行轉換時不會自動暫停。 – LearnCocos2D