0

私は、プログラミングへの最初の進出として XNA を使用して C# でゲーム エンジンを構築してきました。これを使用して、解決方法を知る必要がある問題をより完全に理解したいと考えています。

私が現在取り組んでいるエンジンの部分は、衝突検出です。私が取り組んでいるモードは、画像ベースのプロアクティブな衝突システムです。

キャラクターには位置 (XNA Rectangle) があり、背景には 2 つのテクスチャがあり、キャラクターには Vector2 モーション プロパティがあります。1 は表示テクスチャで、もう 1 つは最初のテクスチャの衝突ゾーンの 2 色マップです。テクスチャ 1 を表示し、背景が読み込まれるたびに、テクスチャの GetData ルーチンを使用してテクスチャ 2 を Color[] の配列に読み込みます。入力解析ルーチンは、位置を直接変更するのではなく、モーション プロパティに追加します。

したがって、各更新: 入力パーサーを確認し、モーション Vector2 に追加します。各サーフェスの位置に沿ったプレーヤーの位置.X/Y.幅/高さをモーションの方向と比較します。モーションがコリジョン ゾーンに到達する場合 (Color[] 配列との比較によって検出)、モーションはゼロになり (重力サブルーチンを除く)、その特定の方向への移動は行われません。

これにより、ブロックの側面にジャンプしても Y 軸のモーションが終了しないスーパー マリオのようなゲームのように、すべてのモーションを停止しないようにすることができます。

さて、私の問題(その説明はすぐに手に負えなくなりました)...

さまざまな解像度をどのように処理すればよいですか? 画像を拡大縮小して目的の領域を埋める方法がわかりません。次に、GetData をプルするために使用できる形式にします。解像度ごとに異なるバックグラウンド衝突検出器をゲームにロードさせたくありません。アート/デザインではなく、コーディングの仕事だと思います。

4

1 に答える 1

1

比例アプローチを使用します...

バックグラウンド テクスチャにサイズ (Wbk、Hbk) があり、サイズ (Wvp、Hvp) とオフセット (Xvp、Yvp) でビューポートに描画するとします。

ビューポートは、背景を描画する画面内の長方形です。

ここで、スプライトを描画する画面位置 (Xs、Ys) の背景テクスチャ内の正しい座標 (Xc、Yc) を取得したいと考えています...

次に、ビューポートのサイズで割ったビューポートに対する座標をバックグラウンド テクスチャのサイズに掛けた値を計算する必要があります。

   Xc= Wbk * (Xs-Xvp)/Wvp;
   Yc= Hbk * (Ys-Yvp)/Hvp;
于 2012-07-26T08:01:57.767 に答える