ファクトリを使用Shape
して物理エンジンのインスタンスを作成しています。各シェイプのサイズは構築時までわからないため、スタック メモリ + クローンの代わりにファクトリが使用されます。AShape
は物理演算に供給され、次のScene
ように作成されBody
ます。
// Sphere derives from Shape
Sphere *s = Scene.CreateSphere( radius );
// Construct a rigid body with a certain shape
Body *b = Scene.CreateBody( s );
問題Shape
: それぞれが常に 1 つだけに関連付けられることを望みBody
ます。ユーザーがこれを行うことを禁止する必要があります。
Body *b1 = scene.CreateBody( );
Body *b2 = scene.CreateBody( );
Shape *s = scene.CreateBox( 1.0f, 1.0f, 1.0f );
b1->AddShape( s );
b2->AddShape( s ); // bad
追加情報: ここではパフォーマンスが重要であるため、ポインタの一意性に関するコストのかかるパフォーマンス チェックは避けるのが最善です。ただし、デバッグ モードでは、エラー チェックのパフォーマンス ヒットは許容されます。
複数の形状が集約された剛体から離れている可能性があるため、ボディの作成とは別に形状を構築できることが重要です。
Body *b = Scene.CreateBody( );
b->AddShape( shapePtr1 );
b->AddShape( shapePtr2 );
Shape
Body
また、実行時にインスタンスを別のインスタンスに転送できる必要があります。
Body *b1, b2; // initialized elsewhere
Shape *s; // initialized elsewhere, is attached to b1
b1->RemoveShape( s );
b2->AddShape( s );
おそらく、別の API 設計に取り組む必要がありますか? おそらく、クローンは何らかの方法で使用できますか?