物体应该自己画吗?(几何体和纹理的混合)

Should objects draw themselves? (Mixture of geometry and textures)

本文关键字:几何体 纹理 混合 自己      更新时间:2023-10-16

我知道以前已经问过很多次类似的问题。但是,这是一个不同的情况。

我正在使用 SDL2 编写C++游戏。目前,所有对象都会自行绘制。他们这样做是因为他们的画法都略有不同。

例如,按钮包含一个矩形,用SDL_RenderFillRect();

按钮还包含文本,这些文本是使用 SDL_RenderCopy() 绘制的,该文本将SDL_TTF生成的纹理作为参数。

此外,MapView 小部件(基本上是一个可以加载瓦片地图的网格(使用包含水平和垂直SDL_RenderDrawLine()调用的"for"循环将网格绘制出来。

最后,瓷砖本身存储为纹理,使用 SDL_RenderCopy() 绘制。

我知道通常最好不要让对象自己绘制。但是,由于对象的绘制方式差异很大,我不确定另一种方法!

我认为可以为每个对象提供一个 GetTexture(( 函数,使用纹理的对象可以简单地"返回纹理",而几何对象可以生成纹理。对于我的 MapView 对象来说,这变得很复杂,因为当用户在游戏世界中导航时,网格会不断更新(偏移值会更改,网格会在移动时重新绘制(。

像许多这种类型的问题一样,答案是:这取决于你的程序。

如果您只是使用 SDL 以相同的方式绘制它,那么没有理由不这样做。另一种选择可能是为每个对象设置一个特定的渲染类,但这会使工作量加倍。将所有渲染代码放在单个类或函数中也可以正常工作,但它很快就会变得庞大而复杂。

这是一个基于代码复杂性以及将来想要用它做什么的判断调用,我的建议是选择最简单的解决方案。只要您考虑了潜在的缺点,您就可以做出明智的决定。