0

私は現在、楽しみのために SlimDX を使用して C# で小さなゲーム エンジンを作成しようとしています。

世界を破壊可能にしたいので、マップを変更できる必要があります。私のマップは現在ベクター ベースで、 ID2D1PathGeometry (SlimDX の PathGeometry) オブジェクトで表されます。このオブジェクトは、ID2D1Geometry (SlimDX の Geometry) の CombineWithGeometry メソッドを使用して変更されます。

妥当な衝突検出を行うには、ID2D1PathGeometry オブジェクトの正確な形状に関する知識が必要です。たとえば、ボールが壁に跳ね返る角度を計算する場合などです。

では、ID2D1PathGeometry オブジェクトのすべてまたは特定の (場所ごとの) セグメント/ライン/ポイントにアクセスすることは可能ですか? または、すべての線と形状を別のデータ構造に追加で保存するなど、私の目標を達成するための他のより良い方法はありますか?

マップ サイズの制約としてメモリを使用したくないため、ビットマップ ベースのマップはここでは使用しないことに注意してください。

敬具、エミ

4

1 に答える 1

1

特定のポイントに近いジオメトリ セグメントだけを取得する方法はありませんが、すべてのジオメトリ セグメントを取得する方法はあります。

  1. ID2D1SimplifiedGeometrySink から継承するクラスを実装します。
  2. そのクラスのインスタンスを作成し、ID2D1Geometry::Simplify に渡します。

詳細と例はこちらID2D1SimplifiedGeometrySink を拡張してジオメトリ データを取得する方法

特定のポイントに近い部分のみを取得することに関心がある場合は、おそらく次のようにします。

  1. 対象のポイントを囲む長方形のジオメトリを作成します。
  2. ID2D1Geometry::CombineWithGeometryD2D1_COMBINE_MODE==D2D1_COMBINE_MODE_INTERSECTを使用してジオメトリと交差させます。
  3. 上記のメソッドを使用して、交差したジオメトリのシンクを取得します。

詳細: ID2D1Geometry::CombineWithGeometry メソッド

于 2013-01-24T21:32:46.417 に答える