我正在制作一款有能量棒的游戏 酒吧将拥有最多25个能量。当用户消耗能量时,每个“点”应在3分钟内重新填充(从空状态到完全能量棒25x3min = 75min)。
现在,如何在每个场景中实现计时器,甚至在游戏关闭时?
谢谢。
答案 0 :(得分:2)
我认为解决这个问题的最佳方法是使用实际时间,将开始时间保存在外部文件中,并在游戏重新开始时重新计算能量等级。
答案 1 :(得分:1)
如果您想在游戏关闭时进行计数,那么您将不得不使用系统时钟而不是(比如)Time.time或类似时间。
因此,您需要经常检查时间,当您这样做时,计算从现在到您上次检查之间的经过时间。
然后将其乘以一个充值因子,将其加到您的能量水平并存储当前时间。
以秒为单位获取当前时间......
DateTime epochStart = new System.DateTime(1970, 1, 1, 8, 0, 0, System.DateTimeKind.Utc);
double timestamp = (System.DateTime.UtcNow - epochStart).TotalSeconds;
...所以你所做的所有工作的代码片段可能如下所示:
double LastTimeChecked = 0;
double EnergyAccumulator;
int Energy;
const double EnergyRefillSpeed = 1 / (60*3);
const int EnergyMax = 25;
double TimeInSeconds()
{
DateTime epochStart = new System.DateTime(1970, 1, 1, 8, 0, 0, System.DateTimeKind.Utc);
double timestamp = (System.DateTime.UtcNow - epochStart).TotalSeconds;
return timestamp;
}
// call this whenever you can!
void update()
{
double TimeNow = TimeInSeconds();
double TimeDelta = 0;
// if we have updated before...
if( LastTimeChecked != 0 )
{
// get the time difference between now and last time
TimeDelta = TimeNow - LastTimeChecked;
// multiply by our factor to increase energy.
EnergyAccumulator += TimeDelta * EnergyRefillSpeed;
// get the whole points accumulated so far
int EnergyInt = (int) EnergyAccumulator;
// remove the whole points we've accumulated
if( EnergyInt > 0 )
{
Energy += EnergyInt;
EnergyAccumulator -= EnergyInt;
}
// cap at the maximum
if( Energy > EnergyMax )
Energy = EnergyMax;
}
// store the last time we checked
LastTimeChecked = TimeNow;
}
(请注意,这个编译,但我没有正确检查,希望你得到要点!)
此外,您需要将LastTimeChecked变量保存到磁盘并在运行之间重新加载,以便在游戏运行时能量累积。