首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >法力恢复问题

法力恢复问题
EN

Stack Overflow用户
提问于 2015-08-24 08:16:39
回答 3查看 78关注 0票数 2

我们在安卓工作室做游戏,结果被困住了。用于特定法术的资源(法力)应及时恢复,例如每5分钟1点法力点。当比赛结束时,我们真的不知道如何让它恢复。是否有方法检查当前日期/时间并计算已补充的魔法量?将日期和时间转换为字符串并将其与新的日期/时间进行比较似乎是一项“令人兴奋的”工作,但如果有办法,我们将绕过这些机制。提前谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-24 08:40:11

在后台进行此操作的最佳方法是在您的清单中注册一个接收者。这意味着,即使应用程序关机,接收者也会继续收听广播。

在注册接收器Intent.ACTION_TIME_TICK时,您需要的是这个特定的操作。

这里有一个关于这个问题的更详细的答案,时间变化听者

另一个解决方案是在java中使用Calendar类。有了它,你就可以得到准确的分钟,从过去的一个点到现在。这样,您就不必担心解析日期和类似的问题。我不能给您提供具体的例子,因为我自己并没有很好地使用Calendar类,但是我相信您可以在正式文档和堆栈溢出中找到很多东西。

票数 0
EN

Stack Overflow用户

发布于 2015-08-24 08:35:30

不需要使用Date对象,System.currentTimeMillis()的简单使用应该有效。下面是一个基本的大纲:

代码语言:javascript
运行
复制
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对象,并在游戏再次加载时重新加载它。

票数 0
EN

Stack Overflow用户

发布于 2015-08-24 08:50:56

使用System.currentTimeMillis(),您可以以毫秒为单位获得当前时间戳。您可以保存最新的时间戳在您的喜好与每5分钟的运行游戏滴答。在另一种情况下,当您的应用程序从它没有这样做的状态返回时(即称为第一次,唤醒等等)。就像这样:

代码语言:javascript
运行
复制
int manacycles = ((int) (((System.currentTimeMillis() - oldtimestamp) / 1000) / 60) ) % 5;

会给你你必须加的法力点数。

或者,您也可以对日历类执行相同的操作。

同时要记住,玩家只需改变他们的时间就可以这样作弊。如果你的游戏是在线的,你可以从互联网上获得时间,比如

代码语言:javascript
运行
复制
 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();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32177464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档