SDL2:移动所有内容而不是使用视口是不是很糟糕?

时间:2017-01-27 01:16:18

标签: c++ sdl-2

我正在使用SDL2中的自上而下的RPG游戏。我已经到了可以移动角色的地步,使用精灵表和所有爵士乐。我使用SDL_RenderSetViewport开始使用相机。但是,我遇到了一些我不想解决的问题。因此,当我移动播放器时,我没有移动视口,而是移动了其他所有内容。我有一个移动所有精灵(不包括玩家)的函数,它存储在vector中。

我知道这导致了大量的数学计算,但从渲染的角度来看效率是否低?我的逻辑是,因为每次刷新时都会将对象复制到SDL_Renderer。由于它们正在被重新复制,无论变化如何,每次都不会进行相同的处理量吗?

1 个答案:

答案 0 :(得分:1)

是的,这完全没问题。

无论如何,

SDL_RendererSetViewport与此问题无关。此函数影响最终帧相对于窗口的边界。因此,您实际上没有任何其他选择。

  

由于它们正在被重新复制,无论变化如何,每次处理的数量都不一样吗?

你是对的,这没关系。更不用说,你(我假设)在帧的开头清除屏幕。

如果你喜欢冒险,你可能想看看使用glTranslatef,虽然我不推荐它,因为SDL在Windows上使用Direct3D,这意味着你必须以某种方式强制使用OpenGL。

我说你现在的方法很安全;从浏览互联网看,这似乎是一种常见的方式。

  

我有一个移动存储在矢量中的所有精灵(不包括玩家)的函数。

你过分思考这一点。你可以在渲染时改变每个精灵的位置,这比处理整个矢量要高效得多。