私のゲームデザインでは、ロジックスレッドとレンダリングスレッドを可能な限り並列に実行できるようにしようとしています。これを考えると、ゲームロジックからレンダリングスレッドに更新をプッシュする方法が必要です。これを行うための最もクリーンな方法を見つけたいと思います。
私はただの趣味で、デザインパターンや正しい用語がわからないので、最初に申し訳ありません。説明している内容が別の名前で知られている場合は、お知らせください。
レンダリングスレッドによって継続的にアクセスされる、次のようなオブジェクトがあると仮定します。
public class Renderable {
void functionA(int foo) { ... }
void functionB(int foo, int bar) { ... }
void functionC() { ... }
}
functionA
ロジックスレッド中に、、、functionB
およびをランダムなポイントで呼び出す必要がありfunctionC
ますが、オブジェクトが異なるスレッドにあるため、同時実行の問題なしにRenderableに直接触れることはできません。私が本当にやりたいのはRenderableProxy
、と同じインターフェイスでプロキシオブジェクトを作成することです。これにより、すべての呼び出しが保存され、スレッドを整列させたときに同期ウィンドウ中にRenderable
呼び出しが転送されます。Renderable
オブジェクトは次のようになります。
public class RenderableProxy {
Renderable target;
void functionA(int foo) { ? }
void functionB(int foo, int bar) { ? }
void functionC() { ? }
void execute() {
foreach( called_function )
target.???
}
}
関数を表す列挙型などの情報を保持する構造体を作成し、パラメーターを格納して、を呼び出すまでこれをすべて保持すれば、おそらくこれを実装できると信じていますexecute
。
しかし、これについて本当に私を悩ませているのは、インターフェイスを更新するたびに、Renderable
インターフェイスに戻ってRenderableProxy
変更し、変更execute
を処理するように変更する必要があることです。これは私には本当に厄介で、これを処理するための言語機能があるかもしれないと感じています。そのため、Renderableインターフェイスを変更するたびにRenderableProxy
、新しい関数を処理するために書き直す必要はありません。
2つの異なるオブジェクト(オブジェクトとそのプロキシ)のインターフェイスを常に同期させようとせずに、目標を達成できるような魔法の機能はありますか?私はJavaにいくつかのリフレクション機能があることを知っていますが、60Hzゲームで1秒間に数千回リフレクションルックアップを実行することのパフォーマンスへの影響について心配しているので、それに触れるのは少し怖いです。