SDL:制作静态文本变量

SDL: Making Static Text Variables

我正在使用 SDL 制作扫雷,因此我必须使用文本来标记每个图块,并用一个数字来表示该图块周围有多少地雷。我现在将使用数字 1-4,每个数字的显示方式是不变的,因为每个数字始终具有相同的文本、字体、大小和颜色。数字 1-4 的颜色各不相同,但例如,数字 1 始终为蓝色,数字 2 始终为绿色。我想为每个数字 1-4 设置一个静态变量,以便我可以轻松地设置图块的值。这是我所做的:

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 class 只是为了制作文本并将其显示在屏幕上。无论如何,我创建了一个名为 numbersstd::map,我可以按如下方式访问它:Text::numbers["2"] 并且这将是一个 return 文本对象,它将在此显示为数字 2案子。我通过在 Text class.

的构造函数中调用 initNumbers() 来初始化地图

在瓦片class中,有一个成员变量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() 并且之后我才开始制作 tile 对象。有什么建议么?谢谢。

initNumbers 在构造 Text 对象时被调用。如果您从未创建使用该构造函数的 Text 对象,则不会发生 numbers 的初始化。

Text::initNumbers 应与其他应用程序初始化代码一起从其他地方调用。