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 只是为了制作文本并将其显示在屏幕上。无论如何,我创建了一个名为 numbers
的 std::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
应与其他应用程序初始化代码一起从其他地方调用。
我正在使用 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 只是为了制作文本并将其显示在屏幕上。无论如何,我创建了一个名为 numbers
的 std::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
应与其他应用程序初始化代码一起从其他地方调用。