まず、私が何をしたいのかを説明し、後に解決策を提案します。Javaフレーム分割作業
問題
私は仕事の一定量ごとにフレームをやりたいゲームを実行していますよ。たとえば、初期化待ちのキューにN個のオブジェクトがあります(初期化がかなり高価で、Nが大きいとします)、それらをすべて追加した後、コリジョンボックスを作成したいと思います。レンダーコールを制限するためにこれらをマージします。私はこれらの操作はすべてゲームの世界と密接に結びついているため、これらの操作を別のスレッドで行うことはできません。しかし、私はこれらのすべての操作を一口サイズのチャンクに分割して、各フレームを実行し、遅れが最小限になるようにしたい(フレームレートの低下)。これをどうやってやりますか?
boolean loadEverything() {
for (int i = 0; i < objectsToAdd.length; i++) {
world.add(objectsToAdd[i]);
if (i % 10 == 0) {
return stop();
}
}
makeCollision();
return stop();
mergeObjects();
return true;
}
呼び出し、例えば
:1回のコールの後に停止し、それが再びそれを呼び出した後に中断したところから続けることができる機能を持っていいだろうソリューション
を提案
loadEverything()
最初のobjectsToAdd/10回は、一度に10個のオブジェクトをゲーム世界に追加します。その後、それを呼び出してmakeCollision()
を実行してから停止してください。再度呼び出すとmergeObjects()
が実行され、関数はtrueを返します。呼び出し元関数では、trueを返すまでloadEverything()
を実行します。
hereのようなイールド・リターン・イールド・ブレイク・インプリメンテーションについては知っていますが、より一般的なインプリメンテーションがあるのか、それとももっと良い解決策が必要なのかは疑問です余分な依存関係。