1

キャラクターを使って 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 を実装できますか?

ありがとう

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: おそらく、各フレームの開始時に 1 回だけ時間を取得して、フレームでわずかに異なる時間に処理が行われないようにすることをお勧めします。

于 2014-12-22T09:41:14.287 に答える