2013-03-28 2 views
1

Я пытаюсь отобразить оценку на экране в маленькой и очень простой игре.Отображение текста в окно C++

Я использую эту функцию, чтобы отобразить слово Score::

void drawBitmapText(char *string, int score, float r, float g, float b, float x,float y,float z) { 
    char *c; 
    glColor3f(r,g,b); 
    glRasterPos3f(x,y,z); 
    for (c=string; *c != '\0'; c++) { 
     glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, *c); } 
} 

я называю выше function() с помощью: drawBitmapText("score: ",score,0,1,0,10,220,0);

Он успешно выводит слово Score: и в нужном месте, но проблема я m, содержит фактически int, который представляет оценку рядом с ним.

Как включить отображение int? Я успешно его передаю.

Я пробовал преобразовать его string/char и добавить/конкатенировать его, но он просто отображает случайные буквы ... Спасибо.

ответ

1

Поскольку вы используете C++ это будет намного проще начать использовать C++ библиотеки для работы со строками. Вы можете использовать std::stringstream, чтобы объединить надпись и оценку.

using namespace std; 

void drawBitmapText(string caption, int score, float r, float g, float b, 
    float x,float y,float z) { 
    glColor3f(r,g,b); 
    glRasterPos3f(x,y,z); 
    stringstream strm; 
    strm << caption << score; 
    string text = strm.str(); 
    for(string::iterator it = text.begin(); it != text.end(); ++it) { 
     glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, *it); 
    } 
} 
+0

Отлично. Решает проблему блестяще. Хороший код для запоминания. Спасибо за ваше время. – Reanimation

+1

Я рад, что это помогло. Я не могу вас ободрить, чтобы попытаться забыть о строках C с нулевым завершением и начать использовать строки C++. Это делает жизнь намного проще. –

+0

Я расскажу об этом :) – Reanimation

0

использование std::stringstream

, например

std::stringstream ss; 

ss << "score: " << score; 

затем вызвать

ss.str().c_str(); 

в строку вывода переменного тока

0

Вы можете использовать snprintf создать отформатированную строку, таким же образом вы используйте printf для печати форматированной строки на консоль. Вот один из способов переписывания:

void drawBitmapText(char *string, int score, float r, float g, float b, float x,float y,float z) { 
    char buffer[64]; // Arbitrary limit of 63 characters 
    snprintf(buffer, 64, "%s %d", string, score); 
    glColor3f(r,g,b); 
    glRasterPos3f(x,y,z); 
    for (char* c = buffer; *c != '\0'; c++) 
     glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, *c); 
} 
+0

Это действительно здорово, но 'snprintf' заблудился, видимо, это не часть C89. Это стандартно только на C99. см. http://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 Спасибо за ваше время: D – Reanimation

+1

Если вы хотите совместимость с C89, вы можете использовать 'sprintf' (без параметра max-length) до тех пор, пока вы убедитесь, что ваш буфер имеет достаточно места для всех возможных значений оценки. Кроме того, вы можете использовать специфический для Microsoft '_snprintf', и в этом случае вам нужно добавить нулевой символ в конец вашего буфера после его вызова. – Tony

+0

Ах спасибо @ Тони. Я ценю ваше время. Это приятно знать: D Я буду изучать его для дальнейшего использования. – Reanimation

Смежные вопросы