如何在SDL中缩放精灵?
答案 0 :(得分:8)
SDL不直接提供缩放功能,但an additional library called SDL_gfx提供了旋转和缩放功能。还有another library called Sprig提供了类似的功能。
答案 1 :(得分:1)
如果你使用SDL_RenderCopy()从纹理中获取精灵,你可以进行缩放,但我无法保证你的抗锯齿效果。
使用函数SDL_RenderCopy()传递4个参数:
你应该只修改你的目标,例如,如果你要渲染一个300 x 300的图像并且你想要它缩放,你的目标应该是150 x 150或72 x 72或你想要的任何值规模。
答案 2 :(得分:0)
易卜拉欣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
,则可以完全从输入纹理渲染到目标。
答案 3 :(得分:-1)
你没有提供任何代码,所以我假设你正在使用纹理和SDL_Renderer:
使用SDL_RenderCopy()时,纹理将被拉伸以适合目标SDL_Rect,因此如果使目标SDL_Rect更大或更小,则可以执行纹理的简单缩放。
答案 4 :(得分:-3)
如果您使用SFML,那么您将获得一组非常相似的跨平台功能,但图形是硬件加速的,并且免费提供缩放和旋转等功能,无需额外依赖性和在没有明显的CPU运行时间方面。