使用ostream在opengl中以SDL打印得分?

时间:2013-03-05 16:10:25

标签: c++ sdl

我使用以下代码在SDL屏幕中打印:

SDL_GL_RenderText(  timer, font, color, &position);
sprintf(timer," Time : %d",time);

因为我在C ++上做项目,而且sprintf是C风格函数,所以我不应该使用sprintf,我试图使用ostringstream,但我不知道如何用它。

有人发布了等效的c ++样式(使用ostringstream或等效的)。

1 个答案:

答案 0 :(得分:2)

您可以在任何文档或示例中找到的代码示例..

#include <sstream>

std::ostringstream str;
str << "Time: " << time;

// get the std::string
str.str();
// get the C char*
str.str().c_str();

// reset the string stream
str.str("Initial value");

所以如果你想使用C char数组

const char* text = str.str().c_str();
SDL_GL_RenderText(text, font, color, &position);

实现此目的的另一种方法是使用自定义std::strbufstd::ostream将调用包装到SDL_GL_RenderText,这将允许执行以下操作:

gl_out << font << color << position << "Timer :" << time << std::flush;

根据字体,颜色和位置有一个真实的类型,而不是像void *或简单的int。如果是这种情况,您可以使用自定义类型包装它们。

这种方法有点复杂,需要很好地理解标准C ++库中的流管理,但IMO更加优雅。虽然我从未尝试过使用OpenGL,但它可以使用syslog(带日志级别规范)和其他文本输出媒体。