簡體   English   中英

實施持續倒數計時器

[英]Implementing persistent countdown timer

在某些游戲中,某些動作與時間相關。 例如,如果用戶玩過游戲,每24小時就會獲得一個積分。...關閉手機電源,數小時后正確設置計時器后再回來。

這是怎么做的? 必須有某種方法可以將當前時間寫入持久性存儲,然后從中讀取?

我只是猜測是這樣的:

 NSDate * now = [NSDate date];
 NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
 [outputFormatter setDateFormat:@"HH:mm:ss"];
 NSString *newDateString = [outputFormatter stringFromDate:now];

然后是將newDateString寫入持久性存儲的部分。

另外,如果這是一種方法,那么如果用戶在設備上手動更改時間會怎樣? 我們可以依靠此方法還是可以使用其他方法來跟蹤游戲中某些特定時刻之間傳遞的實時時間?

您可以通過將下一個獎勵時間寫入NSUserDefaults並比較以前的值來實現。

// Fetch previous "next award" time.
NSNumber *previousTime = [[NSUserDefaults standardUserDefaults] objectForKey:@"next_award_time"];
NSTimeInterval now = [[NSDate date] timeIntervalSince1970];

// If we haven't yet scheduled a "next award" time, or if we've passed it..
if (!previousTime || [previousTime doubleValue] < now) {
  // We had a previous value, so we've passed the time.
  if (previousTime) {
    // Award user.
  }
  // Set next award time.
  NSTimeInterval nextTime = [[NSDate date] timeIntervalSince1970] + 60*60*24;
  [[NSUserDefaults standardUserDefaults] setObject:@(nextTime) forKey:@"next_award_time"];
}

就擔心用戶更改自己的設備時間而言,您需要向無偏向的第三方時鍾發出網絡請求。 這可以是您控制的服務器,也可以是眾所周知的時間服務器。 您可能想查看此答案以獲取有關如何聯系NTP的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM