自分だけのユニット「システム」を使いたい。1 ピクセルなどは 0.01 単位に相当します。
自分の Unitsystem で何かを描画したいときは、常に値を 100 で乗算/除算する必要があります。
誰か助けてくれませんか^^?
自分だけのユニット「システム」を使いたい。1 ピクセルなどは 0.01 単位に相当します。
自分の Unitsystem で何かを描画したいときは、常に値を 100 で乗算/除算する必要があります。
誰か助けてくれませんか^^?
Spritebatch.Begin() の最後のパラメーターは、変換マトリックスにすることができます。
TransformMatrix = Matrix.CreateScale(0.01);
spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, TransformMatrix);
Farseer Physics は、ConvertUnits
この種のクラスを提供します。メモリから、興味のあるメソッドはToSimUnits
とToDisplayUnits
です。Farseerのドキュメントでは、次のように説明されています。
// 1 meter = 64 pixels
ConvertUnits.SetDisplayUnitToSimUnitRatio(64f);
// If you object is 512 pixels wide and 128 pixels high:
float width = ConvertUnits.ToSimUnits(512f) // 8 meters
float height = ConvertUnits.ToSimUnits(128f) // 2 meters
したがって、ルールは次のとおりです。
- エンジンにピクセルを入力する必要があるときはいつでも、最初に数値をメートルに変換する必要があります。
- エンジンから値を取得して画面に描画するときはいつでも、最初にそれをピクセルに変換する必要があります。
これらの単純なルールに従えば、安定した物理シミュレーションが得られます。
関連するトピックについては、解像度の独立性を検討する必要があります。