1

私は現在 Java ゲームに取り組んでおり、100 から始まるプレイヤーの健康を表す int を持っています。敵と交差するたびに健康は 5 ずつ減少しますが、これは 1 秒間に 60 回チェックされます。そのため、プレイヤーが敵と接触している 1 秒間は急速に減少するため、敵に接触している 1 秒ごとに 300 ずつ減少します。intの値が約3〜5秒間変化するのを止めることができるかどうか疑問に思っていますか? それが可能かどうかはわかりませんが、これを試しました:

try {
   Thread.sleep(4000);
} catch(InterruptedException ie) {
   Thread.currentThread().interrupt();
}

その後、int を追加できますが、プログラム全体が 4 秒間停止するだけで、その時点で他の処理が行われています。

4

1 に答える 1

1

Thread.sleep により、現在のスレッドが実行を一時停止します」 - スレッド全体を停止したくない場合は使用しないでください。

値の変更を担当するスレッドを作成しint、定期的なタスクを実行するために、ScheduledExecutorService#scheduleAtFixedRateを使用できます。例えば:

Runnable myRunnable = new Runnable() {
    public void run() {
        //...
    }
};

ScheduledExecutorService ex = Executors.newScheduledThreadPool(1);
ex.scheduleAtFixedRate(myRunnable , INITIAL_DELAY, PERIOD, TIMEUNIT);

これで、スレッドを実行する時期と期間を決定できます。ただし、手遅れになってコードが乱雑になる前に、設計を再検討することをお勧めします。

于 2013-06-15T08:15:52.467 に答える