gpt4 book ai didi

c++ - SDL:制作静态文本变量

转载 作者:行者123 更新时间:2023-11-28 05:24:40 25 4
gpt4 key购买 nike

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

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称为 numbers我可以按如下方式访问:Text::numbers["2"]这将返回一个文本对象,在这种情况下将显示为数字 2。我通过调用 initNumbers() 来初始化 map 在 Text 的构造函数中类。

在tile类中,有一个成员变量Text number ,用于显示该图 block 对象周围的地雷数量 (1-4)。当我将它初始化为 Text::numbers["2"] ,例如,数字不会显示在屏幕上。当我手动将它初始化为 Text("res/arial.ttf", 20, "2", { 0, 255, 0, 255 }) ,数字确实会显示出来。

我不知道问题出在哪里或如何解决。也许这与什么时候有关 TTF_Init()被调用;即它在 std::map<...> numbers 之后被调用被初始化(这会很糟糕,因为文本需要在库被初始化后被初始化)。虽然我基本上调用 TTF_Init()main的开头然后我才开始制作瓷砖对象。有什么建议么?谢谢。

最佳答案

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

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

关于c++ - SDL:制作静态文本变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40797724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com