我正在制作一个角色的RPG风格游戏,我希望角色的当前健康状况每隔一段时间就会增加,直到它完全健康。
我搜索了很多文章和帖子,我似乎无法找到任何可以做到的事情。我的想法是在扩展Application的全局var类中创建一个Thread或Handler。
我正在使用
@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,因为应用程序被电话打断或者他们点击了主页按钮?
由于
答案 0 :(得分: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:您可能只希望在每个帧的开头只抓取一次时间,这样框架就不会在稍微不同的时间进行操作。