10

SDLでスプライトをスケーリングするにはどうすればよいですか?

4

5 に答える 5

9

SDLはスケーリング機能を直接提供しませんが、回転およびズーム機能を提供するSDL_gfxと呼ばれる追加のライブラリがあります。同様の機能を提供するSprigと呼ばれる別のライブラリもあります。

于 2010-02-15T19:22:14.200 に答える
4

SDL_RenderCopy()を使用してテクスチャからスプライトを取得している場合はスケーリングを実行できますが、アンチエイリアスを保証することはできません。

関数SDL_RenderCopy()を使用して、4つのパラメーターを渡します。

  • レンダラーへのポインター(レンダリングする場所)。
  • テクスチャへのポインタ(スプライトを取得する場所)。
  • ソースrectへのポインタ(テクスチャ上でスプライトを取得する領域と位置)。
  • そして、dest rect(描画しようとしているレンダラー上の領域と位置)へのポインター。

たとえば、画像を300 x 300でレンダリングする場合、画像を拡大縮小する場合は、目的地を150x150または72x72、あるいは拡大縮小したい値のように変更する必要があります。

于 2017-07-24T20:03:19.173 に答える
2

コードを提供していないので、テクスチャとSDL_Rendererを使用していると仮定します。

SDL_RenderCopy()を使用すると、宛先のSDL_Rectに合わせてテクスチャが引き伸ばされるため、宛先のSDL_Rectを大きくしたり小さくしたりすると、テクスチャの単純なスケーリングを実行できます。

https://wiki.libsdl.org/SDL_RenderCopy

于 2017-01-04T19:01:29.307 に答える
2

IbrahimCSのソリューションが機能します。

このソリューションに加えて、コードを提供します。注意すべきもう1つのことは、左上がスケーリングされたテクスチャをレンダリングするための原点である新しい位置(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);

textureSDL_Texture、でrendererあると仮定しSDL_Renderer、入力テクスチャから宛先まで完全にレンダリングします。

于 2018-12-06T18:11:13.493 に答える
-5

代わりにSFMLを使用すると、非常によく似たクロスプラットフォーム機能のセットが得られますが、グラフィックスはハードウェアアクセラレーションであり、スケーリングや回転などの機能は、追加の依存関係を必要とせず、目立ったCPUを使用しないという点で無料です。操作する時間。

于 2010-02-16T10:11:56.920 に答える