在SDL中缩放精灵

16

我该如何在SDL中缩放精灵?

5个回答

11

8
如果你使用SDL_RenderCopy()从纹理中获取精灵,可以进行缩放,但我不能保证抗锯齿效果。
使用函数SDL_RenderCopy()时,您需要传递4个参数:
1. 渲染器指针(您要在哪里进行渲染)。 2. 纹理指针(您要获取精灵的位置)。 3. 源矩形指针(您在纹理上获取精灵的区域和位置)。 4. 目标矩形指针(您要在渲染器上绘制的区域和位置)。
您只需要修改目标矩形,例如,如果您要渲染一个300 x 300的图像并且想要缩放它,您的目标矩形应该是150 x 150或72 x 72或任何您想要缩放的值。

4

您没有提供任何代码,因此我假设您正在使用纹理和SDL_Renderer:

使用SDL_RenderCopy()时,纹理将被拉伸以适应目标SDL_Rect,因此如果您使目标SDL_Rect较大或较小,则可以对纹理进行简单的缩放。

https://wiki.libsdl.org/SDL_RenderCopy


2

来自Ibrahim 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_TexturerendererSDL_Renderer,您需要从输入纹理完全渲染到目标位置。

-5
如果你使用SFML,那么你将获得一组非常相似的跨平台功能,但图形是硬件加速的,并且缩放和旋转等功能都是免费的,无需额外的依赖项,并且在操作时几乎不需要占用CPU时间。

1
SDL 可以进行扩展。 - Martin Véronneau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接