私は古典的な小惑星に傾いて、少しJavaゲームに取り組んでいます。多くのオブジェクトの定期的な更新を処理する方法は?
すべてのフレーム:移動または回転させるオブジェクト
このゲームでは一定の時間間隔で更新する必要があるオブジェクトのトンがあります。
毎秒:ゲームタイマー。
数秒ごと:敵AI、敵の産卵
数秒ごと:船の武器から新しい弾を発射する。もちろん
//This method is called by a timer that is run every 30 milliseconds
//It will iterate through all objects that require periodic updates and call their
//update method every 30ms.
public void frameUpdateLoop(){
for(Updating u : allObjectsThatNeedPeriodicUpdates){
u.update();
}
}
public class EnemySpawner implements Updating{
private static final int SPAWN_TRESHOLD=500;
private int timeUntilNewEnemySpawns=SPAWN_TRESHOLD;
//This method is called by frameUpdateLoop()
//It is only supposed to do work once every 500ms, but is called every
//30ms nonetheless.
public void update(){
timeUntilNewEnemySpawns -= 30; //Subtract time since last update
if(timeUntilNewEnemySpawns <= 0){
SpawnNewEnemy();
timeUntilNewEnemySpawns = SPAWN_TRESHOLD;
}
}
}
これは、私はそれを使用していますどのようにの一例に過ぎないので、私は不要な部分を削除:
現在、私はこのようにそれを処理しています。
私の質問は: このようなアップデートシステムを実装するのは正しいですか? 私は周りを読んでいるとき、ほとんどの時間はタイマーがそのようなタスクに使用されていることに気づいた。
しかし、それは私が数多くのタイマーを一度に実行する必要があります(更新が必要なオブジェクトごとに1つ)。
Timerの各インスタンスが正しく理解されていれば、新しいスレッドも作成されるため、ある時点で問題が発生する恐れがあります(現在のシステムのスレッド処理パフォーマンスの損失よりも、スレッドの数が多くなりすぎます)。
私はJavaには新しいので、私の恐怖が根拠がないのか、そう多くのタイマーを持っているのは本当に悪い考えか分かりません。
このトピックに関するご意見、ご要望、訂正ありがとうございます。
フレームレンダリングにはミリ秒がかかり、フィジックスの式ではどれくらいの時間が経過したかを知る必要があるため、deltaTimeを渡すこともお勧めします。遅い時間に、もっと長いジャンプなどを取らせてください。 – Karl
@ Karl、それは多くの場合に当てはまりますが、ここで読む価値のある固定vs可変タイムステップに関する大きな議論があります:http://gamedev.stackexchange。 com/questions/1589/fixed-time-step-vs-variable-time-step –