1

私は学校向けのプロジェクトのUIを開発しており、ここにリストされているようにテクスチャをスケーリングするのと同様の方法を試しましたが、ここに問題があります。

私たちのプロジェクトは1440x900で開発されているので、その画面解像度に合う独自の画像を作成しました。クラスでプロジェクトをデモする必要がある場合、プロジェクターは1024 x 768までしかレンダリングできないため、画面上の多くのものが失われます。ウィンドウのサイズ変更機能を追加し、このようにスケーリングを行っています。テクスチャ2dと、Button(Texture2d img、float width、float height)によって圧縮されたVector2位置を持つ「button」という独自のクラスがあります。

私の考えは、画像の位置をウィンドウの幅と高さのスケーラブルな%に設定することです。そのため、画像の位置を0-1の間の数値に設定してから、ウィンドウの幅と高さを乗算して、すべてを適切にスケーリングしてください。

(このコードは適切な構文ではありません。私は要点を伝えようとしているだけです)

Button button = new Button(texture, .01, .01 );
int height = graphicsdevice.viewport.height * button.position.Y;
int width = graphicsdevice.viewport.width * button.position.X;

Rectangle rect = new Rectangle(0,0,width, height);

sprite.being()
sprite.draw (button.img, rect, color.white);
sprite.end

それを描画し、マウスをドラッグしてウィンドウのサイズを変更しても、何もスケーリングされません。そもそも別のバッファの高さとバッファ幅でハードコーディングすると、解像度に関係なく画像はほぼ同じサイズのままになります。ただし、解像度が小さいほど、画像のピクセル化が進みます。

動的なtexture2dスケーリングを可能にするようにプログラムを設計するための最良の方法は何ですか?

4

1 に答える 1

0

Hannesh が言ったように、フルスクリーンで実行すれば、これらの問題は発生しません。ただし、これを行う方法には根本的な問題もあります。ウィンドウのサイズ変更中にまったく変化しないスプライトの位置を使用する代わりに、スプライトのサイズを使用する必要があります。Sprite クラスの Scale というプロパティを使用してこれを行うことがよくあります。したがって、スプライトの位置を 0 と 1 の間でクランプする代わりに、スプライトの Size プロパティを 0 と 1 の間でクランプする必要があります。その後、ウィンドウを再スケーリングすると、スプライトが再スケーリングされます。

私の意見では、これを行うためのより良い方法は、デフォルトの解像度を使用することです。この場合、1440 x 900 です。次に、ウィンドウが再スケーリングされた場合は、すべてのスプライトのスケーリング係数に新しい画面サイズと古い画面サイズの比率を掛けるだけです。 . これは、更新ごとに乗算するのではなく、サイズ変更ごとに 1 回の乗算しか必要としません (更新ごとにクランプされた 0-1 値から実際のスケールに変換する必要があるため、メソッドが行うことです)。

また、スプライトを手動で再スケーリングしたときに気付いた効果は正常です。画像を任意のサイズに再スケーリングすると、レンダリングされた画像にアーティファクトが発生します。これは、グラフィックス デバイスがほとんどのサイズで何をすべきかを認識していないためです。これを回避する良い方法は、開発プロセス中にフィラー アートを使用してから、正しい解像度で最終的なアートを作成することです。ウィンドウのサイズを任意のサイズに変更しているため、明らかにこれはあなたの状況には当てはまりませんが、ゲームでは通常、特定の固定解像度にしか切り替えることができません。

于 2011-03-03T03:53:40.983 に答える