クライアントごとのスレッドモデルを使用してゲームに取り組んでいます。ゲームは、0.5秒ごとにすべてのプレーヤーを更新する必要があるように動作します。更新はすべて0.5秒間隔で行われる必要があるため、すべて同時に実行する必要があります。私の考えは、「グローバル更新」がいつ行われる必要があるかを追跡するクラスを用意し、その時が来たら、すべてのプレーヤーを調べて、更新するように指示することです。
for(Player p : currentPlayers) {
p.update();
}
問題は、すべてのプレイヤーが独自のスレッドを持っているので、すでにそこにあるので、プレイヤーにその事実を利用してもらいたいということです。別のクラスからの更新を実行すると、数百のスレッドが個別に実行できることを実行する1つのスレッドがあります。スレッドがクラスPlayerのメソッド'update()'を呼び出す場合、それを呼び出したスレッドとは異なるスレッドがそれを実行するように、またはおそらく同じ目標を達成できる別のアプローチになるように、どのように設計できますか?
説明が必要な場合は、お問い合わせください。どうもありがとう!
更新:皆さんはこれについてどう思いますか(投稿で大量のコードをフォーマットする方法がわかりません!):
更新2:前回リセットするには、すべてのプレーヤーがいつ更新を終了するかを知る必要があることに気づきました...
パブリッククラスPseudoExampleはRunnableを実装します
{{
//「players」がアクティブなプレーヤーでいっぱいであると想定します。
プライベートプレーヤー[]プレーヤー=新しいプレーヤー[100];
private long lastUpdate = System.currentTimeMillis();
public void run()
{{
while(true)
{{
if(System.currentTimeMillis()-lastUpdate> = 500)
{{
for(Player p:players)
{{
p.update = true;
}
}
試す
{{
Thread.sleep(10);
} catch(InterruptedException e)
{{
}
}
}
プライベートクラスPlayerはRunnableを実装します
{{
プライベートブール更新=false;
public void run()
{{
while(true)
{{
if(更新)
{{
//ここで更新します...
}
試す
{{
Thread.sleep(10);
} catch(InterruptedException e)
{{
}
}
}
}
}