【发布时间】:2021-02-20 17:56:47
【问题描述】:
这是我的问题的后续:Is it okay to have a SDL_Surface and SDL_Texture for each sprite?
我创建了一个名为 entity 的类,每个类都有一个 SDL_Texture,它在构造函数中设置,然后为向量中的每个屏幕实体调用成员函数 render(),它使用 SDL_RenderCopy() 绘制到渲染器。
这个 render() 函数包括根据每个精灵的位置/相机数据为每个精灵生成矩形
这样好吗?有更快的方法吗?
我用 96 个 sprite 制作了一个测试关卡,每个 sprite 占用 2% 的屏幕,有大量的过度绘制,ft 为 15ms (~65fps),分辨率为 1600x900。对于一些精灵来说似乎有点慢,而且我的电脑呼吸比玩完整游戏(如 spelunky 或 isaac)时重得多。
【问题讨论】:
-
这是 SDL 提供的唯一绘图方式,您只能缓存结果或操作输入。在内部,较新的 SDL 将多个绘制批处理为一个,但它受到您输入其输入的内容的限制。如果您可以计算出哪些部分绝对是不可见的 - 这样做并且不要绘制它们。如果您知道图像没有透明度(或其他确保可见性的方式) - 将它们从前到后渲染以减少过度绘制。将图像打包到图集中可以显着减少纹理变化,从而提供更好的性能。