我知道之前曾多次提出过类似的问题。但是,这是一个不同的情况。
我正在使用SDL2用C ++编写游戏。目前,所有对象都自己绘制。他们这样做是因为他们都略有不同。
例如,Button包含一个用ApplicationController.renderer.render(partial: 'messages/message', locals: { message: message })
按钮还包含使用SDL_RenderFillRect();
绘制的文本,该文本将SDL_TTF生成的纹理作为参数。
此外,MapView小部件(基本上是一个可以加载tilemap的网格)使用包含水平和垂直SDL_RenderCopy()
调用的“for”循环绘制网格。
最后,瓷砖本身存储为纹理,使用SDL_RenderDrawLine()
绘制。
我知道通常最好不要让对象自己绘制。但是,因为对象的绘制方式有很多变化,我不确定另一种方式!
我认为可能为每个对象设置一个GetTexture()函数,使用纹理的函数可以简单地“返回纹理”,而几何对象可以生成纹理。我的MapView对象变得复杂,因为当用户在游戏世界中导航时,网格会不断更新(更改偏移值并在移动时重绘网格)。
答案 0 :(得分:2)
像这么多类型的问题一样,答案是:这取决于你的程序。
如果您只是每个人都使用SDL以相同的方式绘制它,那么没有理由不这样做。另一个替代方案可能是为每个对象设置一个特定的渲染类,但这会使工作量增加一倍。将所有渲染代码放在单个类或函数中也可以正常工作,但它会变得大而复杂。
这是一个基于代码复杂性以及将来要用它做什么的判断调用,我的建议是选择最简单的解决方案。只要你考虑到潜在的缺点,你就可以做出明智的决定。