2013-03-28 93 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:,並在正確的地方,但這個問題我其中包括實際上代表它旁邊得分的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'(沒有最大長度參數)只要你確保你的緩衝區有足夠的空間來獲得所有可能的分數值。或者,您可以使用特定於Microsoft的'_snprintf',在這種情況下,您需要在調用緩衝區後添加空字符。 – Tony

+0

啊感謝@託尼。我感謝你的時間。很高興知道:D我會研究它以備將來參考。 – Reanimation