SDL:制作静态文本变量

时间:2016-11-25 04:25:48

标签: c++ sdl sdl-ttf

我正在使用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对象。有什么建议?感谢。

1 个答案:

答案 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以及其他应用程序初始化代码。