XNAの解像度に依存しない2Dレンダリング


7

任意の解像度で2Dゲームをレンダリングするための最良の方法を見つけようとしています。

私は現在1920x1200でゲームをレンダリングしています。レンダリング方法やゲームロジックを変更せずに、ユーザーが選択した解像度に合わせてゲームをスケーリングしようとしています

ゲームを任意の解像度にスケーリングする最良の方法は何ですか?

編集:私はこれを達成しようとしています:

http://www.david-amador.com/2010/03/xna-2d-independent-resolution-rendering/

しかし、彼が使用しているメソッドオーバーロードが見つからないため、彼が持っているコードはXNAの別のバージョンのものであると思います。


1
いくつかの解像度をデフォルトとして設定し、すべてを元の寸法のスケールで描画します*(ユーザー解像度/デフォルト解像度)?
共産主義者ダック

1
SpriteBatch.Drawオーバーロードを探していますか?XNA 4.0を使用している場合は、これを変換マトリックスに使用する必要があります。msdn.microsoft.com / en-us / library / ff433701.aspxこれが最後の引数です。次回は、実際のコードを指定してみてください。
Michael Coleman、2011年

サンプルコードを読むと、Draw関数の1行を変更するだけで機能するようになりました。SpriteBatch.Beginのパラメーターは4.0で変更されました。spriteBatch.Begin(SpriteSortMode.Immediate、BlendState.AlphaBlend、null、null、null、null 、Resolution.getTransformationMatrix());
Leniency

レンダーターゲットにレンダーして、それをスケーリングすることもできます。それについて行くためのちょうど別の方法。(効率についてはよくわかりません)ひどい問題になるとは思いません。
Michael Coleman

回答:


4

編集:

SpriteBatch.Draw(Texture2D、Rectangle、Color)の呼び出しを探しています。Rectangleは、画面上のスケーリングされた描画ターゲットを表します。

ここでは、グリッドレイアウトを使用していないと仮定しています。質問では指定されていなかったため、設定されたグリッドではなく、任意のピクセルでアセットを描画できるようにします。

  1. 最初に、何が「ネイティブ」解像度であるかを決定します。おそらく高さだけかもしれませんが、異なるモニターは異なるアスペクト比を持っているため、それを考慮する必要があります。1200をネイティブの高さとして選択しましょう。すべてのスケーリングはこの数値に基づいて行われます。

  2. テレビで720p-高さの60%だけでゲームを実行しているとしましょう。次に、すべてのユニット座標と長方形サイズに0.6を掛けます。架空のオークユニットの高さは20ピクセルで、ネイティブの解像度では(50,45)にあります。描画時に、ターゲットの四角形は高さが12ピクセルになり、(30、27)に描画されます

  3. スケーリングで正確に計算する場所が問題になる場合があります。ゲームを完全にネイティブ解像度で実行しているかのように実行できます。これは、距離計算、アニメーションの速度と補間などの追加のスケーリングがないことを意味します。次に、描画時またはヒットテストでのみスケーリングを実行します。マウスクリック。すべてをスケーリングすることを選択した場合は、そのスケールをグローバルにすべてのシステムにアクセスできるようにし、それを考慮に入れる必要があります。

これがあなたの質問により良く答えることを願っています。


別に描くことなくゲームをスケーリングしたい。解像度を変更する方法を教えてくれました。解像度を変更しただけではスケールは変更されず、ゲームのサイズが変更されるだけです。これは私が望まないことです。
AttackingHobo

ああ、落とし穴。私はあなたが何を求めているのかを誤解しました。これに対処するための回答の編集。
Leniency

1
質問を編集しました。すべてのシステムですべてを同じようにレンダリングできるようにしたいのですが、事後にはそれをスケーリングできます。
AttackingHobo 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.