1

我正在用一个角色制作一个 RPG 风格的游戏,我希望角色当前的健康状况经常增加,直到其完全健康。

我搜索了许多文章和帖子,但似乎找不到任何东西可以做到这一点。我的想法是在扩展 Application 的全局 var 类中创建一个线程或处理程序。

我在用

 @Override
 public void onCreate()
 {
    super.onCreate();
    thread = new Thread() {
        public void run() {
            // do something here
            System.out.println("GlobalVars - Sleeping");
            handler.postDelayed(this, 10000);
        }
    };
    thread.start();
}

我将在哪里进行函数调用,而不只是打印。这是实现这一目标的好方法吗?我可以为此线程实现 onPause 和 onResume 以防应用程序被电话打断或按下主页按钮吗?

谢谢

4

1 回答 1

0

您不需要(或想要)另一个线程。而是从时间计算健康。

long health = 1; // about to die
long healthAsOf = System.currentTimeMillis(); // when was health last calculated
long maxHealth = 100; // can't be more healthy than 100
long millisPerHealth = 60*1000; // every minute become 1 more healthy

public synchronized long getHealth() {

    long now = System.currentTimeMillis();
    long delta = now-healthAsOf;
    if( delta < millisPerHealth ) return health;
    long healthGain = delta/millsPerHealth;
    healthAsOf += millsPerHealth * healthGain;
    health = Math.min( maxHealth, health+healthGain );
    return health;

}

public synchronized void adjustForPause( long pauseMillis ) {

    healthAsOf += pauseMillis;

}

PS:您可能只想在每帧开始时抓取一次时间,以便该帧不会在稍微不同的时间发生事情。

于 2014-12-22T09:41:14.287 回答