【发布时间】:2016-08-18 04:58:30
【问题描述】:
我知道类似的问题已经被问过很多次了。但是,这是另一种情况。
我正在使用 SDL2 用 C++ 编写游戏。目前,所有对象都自己绘制。他们这样做是因为他们的画法略有不同。
例如,一个 Button 包含一个矩形,用 SDL_RenderFillRect(); 绘制
按钮还包含文本,使用SDL_RenderCopy() 绘制,将SDL_TTF 生成的纹理作为参数。
此外,一个 MapView 小部件(基本上是一个可以加载 tilemap 的网格)使用包含水平和垂直 SDL_RenderDrawLine() 调用的“for”循环绘制网格。
最后,图块本身存储为纹理,使用SDL_RenderCopy() 绘制。
我了解通常最好不要让对象自己绘制。但是,由于对象的绘制方式有很多变化,我不确定另一种方式!
我认为可以为每个对象设置一个 GetTexture() 函数,使用纹理的对象可以简单地“返回纹理”,而几何对象可以生成纹理。这对我的 MapView 对象来说变得很复杂,因为当用户在游戏世界中导航时,网格会不断更新(偏移值会发生变化,并且网格会在移动时重新绘制)。
【问题讨论】:
-
我认为对象自己绘制没有任何问题。通常你会有一个渲染队列,这样你就可以控制绘制的内容并执行其他操作,例如剔除对象等。无论是对象自己绘制还是使用一个访问每个对象数据的函数来绘制所有对象都没有区别。您可以为每种类型的对象设置一组绘制函数并在它们之间切换。
标签: c++ opengl sdl game-engine sdl-2