我正在使用SDL制作扫雷,因此我必须使用文本为每个图块标注一个数字,表示该图块周围有多少个地雷。我现在正在使用数字1-4,每个数字的显示方式是不变的,因为每个数字总是具有相同的文本,字体,大小和颜色。每个数字1-4的颜色不同,但数字1例如总是蓝色,数字2总是绿色。我希望每个数字1-4都有一个静态变量,这样我就可以轻松设置一个tile的值。这就是我所做的:
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
的{{1}},我可以按如下方式访问numbers
,这将返回一个Text对象,在这种情况下将显示为数字2。我通过在Text::numbers["2"]
类的构造函数中调用initNumbers()
来初始化地图。
在tile类中,有一个成员变量Text
,用于显示该tile对象周围的地雷数(1-4)。例如,当我将其初始化为Text number
时,该数字不会显示在屏幕上。当我手动将其初始化为Text::numbers["2"]
时,会显示该数字。
我无法弄清问题是什么或如何解决这个问题。也许它与调用Text("res/arial.ttf", 20, "2", { 0, 255, 0, 255 })
时有关;即,在TTF_Init()
初始化之后调用它(这会很糟糕,因为文本需要在库初始化后初始化)。虽然我基本上在std::map<...> numbers
的开头调用TTF_Init()
,但我之后才开始制作tile对象。有什么建议?感谢。
答案 0 :(得分:1)
query = db((db.auth_group.role == 'managers') &
(db.auth_membership.group_id == db.auth_group.id) &
(db.auth_membership.user_id == db.auth_user.id))
对象时调用 initNumbers
。如果您从未创建使用该构造函数的Text
对象,则不会发生Text
的初始化。
numbers
以及其他应用程序初始化代码。