0

完了するまでに数秒以上かかるアルゴリズムがあります。私が作成している60fpsのフラッシュゲームにそれを実装しようとしています。フレームを更新して後で計算を続行するために、ActionScript3に計算を中断するためのプロビジョニングがあるかどうか疑問に思っています。おそらくないので、xミリ秒の計算を実行し、その後のフレームレートを測定し、フレームレートが次のフレームよりも小さい場合は、次のフレームで計算が実行される時間を調整するのが最善の方法だと思います。または60fps以上。これの欠点は、ゲームが安定した60fpsで実行されないことです...

フレームレートを維持しながらAS3で大規模な計算を(最適に)実行する方法に関する他のアイデアはありますか?

編集:好奇心旺盛な方のために(計算、おそらく私はアルゴリズムを言うべきでした):私はゲームAIオブジェクトのモーションプランニングライブラリを作成しています(モーションプランニングの1つの用途)。アルゴリズムは、何千回も繰り返されるRRT(ランダムツリーを迅速に探索する)の方針に沿っています。

デモリンク:http ://www.swfcabin.com/open/1279044355

クリックしてモーションプランを作成します。円は、任意の方向に一定の大きさで「突き刺す」ことができます。

また、線形速度減衰(つまり摩擦)はありません。

4

3 に答える 3

2

「計算」を段階的に実行し、それが完了するまでフレームごとに1つの段階を実行できますか?フレームに収まることがわかっているチャンクに分割し、時間をかけて実行します。

いくつかの例:

エンティティ間の計算された視線に取り組んだ1つのゲーム。時間がかかり、ハードウェアもそれほど強力ではなかったため、フレームごとに1つのオブジェクトの視線を更新するだけでした。プレイヤーの視線は1フレームおきに更新され、敵はその間のフレームでラウンドロビンで更新されました。

代わりに、大きなデータセットに基づいて何かを計算している場合は、そのデータを小さなチャンクに分割し、フレームごとに1つのチャンクのみを実行します。たとえば、船に最も近い星を見つける必要があり、星が100万個ある場合は、フレームごとに1000個しか実行しない可能性があります。

たぶん、あなたの計算はこれらのどちらにも簡単にマッピングすることはできません。あなたが達成しようとしていることの例があれば、それは非常に役に立ちます!

于 2010-07-12T20:53:03.590 に答える
2

計算の種類に応じて、ShaderJobを使用してバックグラウンドで処理を行うPixelBenderKernelを作成できます。

http://www.boostworthy.com/blog/?p=243

http://www.huesforalice.com/project/47

または、Actionscriptで疑似スレッドを実装する方法のチュートリアルへの別のリンクがあります:http://blogs.adobe.com/aharui/2008/01/threads_in_actionscript_3.html

于 2010-07-13T13:40:57.753 に答える
0

更新:フラッシュプレーヤーは 11.4から労働者をサポートしています

バックグラウンドワーカーは、ニーズに完全に適していると思われるメインワーカーをブロックすることなく、バックグラウンドでタスクを実行できます。素晴らしいボーナスとして、マルチコアCPUでは、バックグラウンドワーカーは、メインワーカーの速度を低下させることなく並行して実行できます。

ただし、AIR mobileは現時点ではiOSのワーカーをサポートしていません(AIR4.0およびAIR13ベータ版)。

また、すでに他の人が言っているように、パスファインディングはそれほど長くないはずです!Rapidは、完了するまでに数秒以上かかるアルゴリズムと互換性がないように思われるため、別のアルゴリズムの使用を検討する必要があります。最も有名なパスファインディングアルゴリズムはAスター(A *)です

于 2014-03-19T15:00:57.857 に答える