SDL:制作静态文本变量

SDL: Making Static Text Variables

本文关键字:文本 变量 静态 SDL      更新时间:2023-10-16

我正在使用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类仅用于制作文本并将其放在屏幕上。无论如何,我制作了一个称为numbersstd::map,我可以如下访问:Text::numbers["2"],它将返回一个文本对象,在这种情况下,该对象将显示为数字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(),但之后才开始制作瓷砖对象。有什么建议么?谢谢。

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

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