我正在使用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()
,而我之後纔開始製作對象。有什麼建議麼?謝謝。
啊,謝謝。我用'main'調用它,現在它工作正常。 –