2016-11-25 72 views
0

我正在使用SDL進行掃雷,因此我必須使用文本標記每個圖塊的數字,以表示該圖塊周圍有多少個地雷。現在我將使用數字1-4,並且每個數字顯示的方式都是不變的,因爲每個數字總是具有相同的文本,字體,大小和顏色。每個數字1-4的顏色都不相同,但例如數字1將始終爲藍色,數字2將始終爲綠色。我想爲每個數字1-4都有一個靜態變量,這樣我就可以輕鬆設置拼貼的值。這是我做了什麼:SDL:製作靜態文本變量

std::map<std::string, Text> Text::numbers; // statically defined 

Text::Text(...) { 
    ... 
    initNumbers(); 
} 

void Text::initNumbers() { 
    numbers["1"] = Text("res/arial.ttf", 20, "1", { 0, 0, 255, 255 }); 
    numbers["2"] = Text("res/arial.ttf", 20, "2", { 0, 255, 0, 255 }); 
    numbers["3"] = Text("res/arial.ttf", 20, "3", { 255, 0, 0, 255 }); 
    numbers["4"] = Text("res/arial.ttf", 20, "4", { 0, 0, 150, 255 }); 
} 

Text類只是製作文本,並把它在屏幕上。無論如何,我做了std::map調用numbers,我可以訪問如下:Text::numbers["2"]並且這將返回一個Text對象,在這種情況下將顯示爲數字2。我通過在Text類的構造函數中調用initNumbers()來初始化地圖。

在瓷磚類中,有一個成員變量Text number,用於顯示圍繞該瓷磚對象的礦山數量(1-4)。例如,當我將它初始化爲Text::numbers["2"]時,該號碼不會顯示在屏幕上。當我手動將它初始化爲Text("res/arial.ttf", 20, "2", { 0, 255, 0, 255 })時,數字會顯示出來。

我找不出什麼問題或如何解決這個問題。也許它與TTF_Init()被調用時有關;即在std::map<...> numbers被初始化之後被調用(這會很糟糕,因爲在庫被初始化之後需要初始化文本)。儘管我在main的開頭實質上稱爲TTF_Init(),而我之後纔開始製作對象。有什麼建議麼?謝謝。

回答

1

​​當構造Text對象時被調用。如果您從不創建使用該構造函數的Text對象,則不會發生numbers的初始化。

Text::initNumbers應該從別處調用,以及其他應用程序初始化代碼。

+0

啊,謝謝。我用'main'調用它,現在它工作正常。 –