質問

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);

そのtextureSDL_Textureであると仮定し、そしてrendererSDL_Rendererあり、そしてあなたが宛先に入力テクスチャから完全にレンダリングします。

あなたが使用している場合は SFML の代わりに、あなたは、クロスプラットフォーム機能の非常によく似たセットを取得けどグラフィックスハードウェアが加速していると、このような拡大縮小や回転などの機能が追加の依存関係を必要としないという点で、操作も目立ったCPU時間を取っていないという点で、両方の、自由のために来ています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top