Android 法力恢复问题
我们在安卓工作室制作游戏,结果被卡住了。用于特定法术的资源(法力)应及时恢复,例如每5分钟恢复1点法力。我们真的不知道如何在比赛结束时恢复。是否有方法检查当前日期/时间并计算补充的法力值?将日期和时间转换为字符串并将其与新的日期/时间进行比较似乎是一项“令人兴奋的”工作,但如果有办法,我们将绕过这些机制。Android 法力恢复问题,android,timer,Android,Timer,我们在安卓工作室制作游戏,结果被卡住了。用于特定法术的资源(法力)应及时恢复,例如每5分钟恢复1点法力。我们真的不知道如何在比赛结束时恢复。是否有方法检查当前日期/时间并计算补充的法力值?将日期和时间转换为字符串并将其与新的日期/时间进行比较似乎是一项“令人兴奋的”工作,但如果有办法,我们将绕过这些机制。 提前感谢。无需使用Date对象,只要使用System.currentTimeMillis()就可以了。这里有一个基本的大纲: long mLastManaRefreshTime = Syste
提前感谢。无需使用
Date
对象,只要使用System.currentTimeMillis()
就可以了。这里有一个基本的大纲:
long mLastManaRefreshTime = System.currentTimeMillis();
void refreshMana()
{
long timeDelta = System.currentTimeMillis() - mLastManaRefreshTime;
mLastManaRefreshTime = System.currentTimeMillis();
float totalManaToRefresh = (float)AMOUNT_TO_REFRESH_IN_ONE_MINUTE * ((float)timeDelta / 60000f);
mMana += totalManaToRefresh;
if (mMana > MAX_MANA)
mMana = MAX_MANA;
}
这个方法当然只是一个提纲。您需要在每个更新周期调用此函数一次。它将计算自上次调用refreshMana
以来经过的时间,并补充所需的数量
如果在游戏关闭时需要此功能,可以将
mlastmanarefreshttime
保存到SharedReferences
对象中,并在游戏再次加载时重新加载它。在后台执行此操作的最佳方法是在清单中注册一个接收者。这意味着即使应用程序关闭,接收器也会继续收听广播
您需要的是在注册收件人时执行此特定操作。Intent.action\u TIME\u TICK
关于这件事,这里有一个更详细的答案
另一个解决方案是在java中使用Calendar类。有了它,你可以得到从过去的某一点到现在的确切时间。这样,您就不必担心解析日期和类似的问题。我不能提供具体的例子,因为我本人没有太多使用Calendar类,但我相信您可以在官方文档和stackoverflow上找到很多关于它的内容。使用Calendar类,可以以毫秒为单位显示当前时间戳。
您可以在跑步游戏中每隔5分钟在首选项中保存最新的时间戳。对于另一种情况,当你的应用程序从没有这样做的状态返回时(即第一次调用、唤醒等)。
大概是这样的:
int manacycles = ((int) (((System.currentTimeMillis() - oldtimestamp) / 1000) / 60) ) % 5;
会给你必须增加的法力值
或者你也可以在课堂上做同样的事情
同时要记住,玩家可以通过改变时间来作弊。如果您的游戏在线,您可以通过以下方式从互联网获得时间:
try {
TimeTCPClient client = new TimeTCPClient();
try {
// Set timeout of 60 seconds
client.setDefaultTimeout(60000);
// Connecting to time server
// Other time servers can be found at : http://tf.nist.gov/tf-cgi/servers.cgi#
// Make sure that your program NEVER queries a server more frequently than once every 4 seconds
client.connect("nist.time.nosc.us");
System.out.println(client.getDate());
} finally {
client.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}