【问题标题】:Replenishing Lives ater 30 minutes30分钟后补充生命
【发布时间】:2015-06-21 14:55:18
【问题描述】:

我正在Spritekit 中编写游戏代码。在用户输掉我的游戏后,我想创造一种方式让用户的生命在 30 分钟后恢复 我创建了一个整数(称为 Lives),每次用户输掉游戏时,它都会从整数中减去 1 我只是不知道如何在 30 分钟过去后补充用户的生命。我在NSObject Helper 类中编写了以下代码,但它不起作用。

-(void)ReplenishLives{
    NSDate *now = [NSDate date];
    NSTimeInterval oldDateTimeInterval = [now timeIntervalSinceReferenceDate];
    NSTimeInterval thirtyMinutes = 60 * 30;
    if (oldDateTimeInterval > thirtyMinutes) {
        Lives = 5;
    }
}

-(void)CheckTime{
    LifeTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(ReplenishLives) userInfo:nil repeats:YES];
}

【问题讨论】:

  • 您需要存储初始(旧)oldDateTimeInterval。在您当前的表格中,您不断从当前时间中减去当前的“旧”。研究使用 NSUserDefaults 存储初始时间值并将其与当前值进行比较。

标签: ios objective-c sprite-kit nsdate nstimer


【解决方案1】:

一个主要问题是您计算的 oldDateTimeInterval 不是用户上次丢失的时间(具体来说,您将其设置为等于从现在到 2001 年 1 月 1 日 12 点之间的时间间隔:格林威治标准时间上午 00 点)。 timeIntervalSinceReferenceDate 为您提供自 2001 年 1 月 1 日凌晨 12:00 GMT 以来的时间,这不是您想要的。

我建议使用NSLog() 记录您的oldDateTimeInterval 并确保它按您希望的方式运行。这将打印您在控制台中放入的任何内容。例如:

NSLog(@"old time interval %f", oldDateTimeInterval);

然后,您可能想做的是保存一个NSDate 变量(可能在NSUserDefaults 中),该变量将保存用户最后一次输掉游戏的时间。然后,您可以从该日期开始进行比较,而不是您现在使用的不相关的日期。

【讨论】:

  • 我试过了,但是当我运行应用程序时,NSLog 没有打印时间间隔。
  • 您是否在该方法中设置了断点以确保代码实际正在执行? NSLog 永远不会让你失望,所以还有其他事情发生。
猜你喜欢
  • 2021-10-11
  • 2023-03-12
  • 1970-01-01
  • 2020-09-11
  • 2021-12-26
  • 2011-10-29
  • 2021-10-25
  • 2013-04-01
  • 2023-04-01
相关资源
最近更新 更多