SDL でのスプライトのスケーリング
-
20-09-2019 - |
質問
SDL でスプライトをスケールするにはどうすればよいですか?
解決
SDLは直接スケーリング機能を提供していませんが、と呼ばれる追加のライブラリがありますSDL_gfx の回転やズーム機能を提供します。似たような機能を提供小枝に呼ば別のライブラリもあります。
他のヒント
SDL_RenderCopy() を使用してテクスチャからスプライトを取得している場合はスケーリングを実行できますが、アンチエイリアスを保証することはできません。
関数 SDL_RenderCopy() を使用して、4 つのパラメータを渡します。
- レンダラー (レンダリングする場所) へのポインター。
- テクスチャへのポインタ (スプライトを取得する場所)。
- ソース四角形(テクスチャ上のスプライトを取得する領域と位置)へのポインター。
- そして dest 長方形 (描画するレンダラ上の領域と位置) へのポインタ。
たとえば、画像を 300 x 300 でレンダリングする予定で、それをスケーリングしたい場合、dest Rect は 150 x 150 または 72 x 72、またはスケーリングしたい任意の値にする必要があります。
イブラヒム・CSからのソリューションが動作します。
私は、このソリューションのトップとコードの提供を拡張してみましょう。 注意すべきもう一つは、左上の新しい位置(x、y)を計算することで、スケーリングされたテクスチャをレンダリングするための原点です。
私はこのようにそれを行う
// calculate new x and y
int new_x = (x + texture->w/2) - (texture->w/2 * new_scale);
int new_y = (y + texture->h/2) - (texture->h/2 * new_scale);
// form new destination rect
SDL_Rect dest_rect = { new_x, new_y, texture->w * scale, texture->h * scale };
// render
SDL_RenderCopy(renderer, texture, NULL, &dest_rect);
そのtexture
がSDL_Texture
であると仮定し、そしてrenderer
はSDL_Renderer
あり、そしてあなたが宛先に入力テクスチャから完全にレンダリングします。
あなたは、任意のコードを提供していないので、私はあなたがテクスチャとSDL_Rendererを使用していると仮定するつもりです。
SDL_RenderCopy()を使用する場合は、質感はあなたが先SDL_Rectを大きくしたり小さくしたりする場合は、テクスチャの簡単なスケーリングを行うことができますので、先SDL_Rectに合うように引き伸ばされます。
あなたが使用している場合は SFML の代わりに、あなたは、クロスプラットフォーム機能の非常によく似たセットを取得けどグラフィックスハードウェアが加速していると、このような拡大縮小や回転などの機能が追加の依存関係を必要としないという点で、操作も目立ったCPU時間を取っていないという点で、両方の、自由のために来ています。