我们在安卓工作室做游戏,结果被困住了。用于特定法术的资源(法力)应及时恢复,例如每5分钟1点法力点。当比赛结束时,我们真的不知道如何让它恢复。是否有方法检查当前日期/时间并计算已补充的魔法量?将日期和时间转换为字符串并将其与新的日期/时间进行比较似乎是一项“令人兴奋的”工作,但如果有办法,我们将绕过这些机制。提前谢谢你。
发布于 2015-08-24 08:40:11
在后台进行此操作的最佳方法是在您的清单中注册一个接收者。这意味着,即使应用程序关机,接收者也会继续收听广播。
在注册接收器Intent.ACTION_TIME_TICK
时,您需要的是这个特定的操作。
这里有一个关于这个问题的更详细的答案,时间变化听者
另一个解决方案是在java中使用Calendar类。有了它,你就可以得到准确的分钟,从过去的一个点到现在。这样,您就不必担心解析日期和类似的问题。我不能给您提供具体的例子,因为我自己并没有很好地使用Calendar类,但是我相信您可以在正式文档和堆栈溢出中找到很多东西。
发布于 2015-08-24 08:35:30
不需要使用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
以来所经过的时间,并补充所需的数量。
如果您需要在游戏关闭时工作,您可以将mLastManaRefreshTime
保存到SharedPreferences
对象,并在游戏再次加载时重新加载它。
发布于 2015-08-24 08:50:56
使用System.currentTimeMillis(),您可以以毫秒为单位获得当前时间戳。您可以保存最新的时间戳在您的喜好与每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();
}
https://stackoverflow.com/questions/32177464
复制相似问题