저는 SDL을 사용하여 Minesweeper를 만들므로 텍스트를 사용하여 각 타일에 얼마나 많은 광산이 해당 타일 주위에 있는지 나타내는 숫자를 표시해야합니다. 나는 지금 숫자 1 ~ 4를 사용할 것이고 각 숫자는 항상 같은 텍스트, 글꼴, 크기 및 색상을 가지므로 각 숫자가 표시되는 방식은 일정합니다. 색상은 숫자 1-4에서 서로 다르지만, 예를 들어 숫자 1은 항상 파란색으로 표시되고 숫자 2는 항상 녹색으로 표시됩니다. 타일의 값을 쉽게 설정할 수 있도록 각 숫자 1-4에 대한 정적 변수를 갖고 싶습니다. 여기에 내가 무엇을했는지 있습니다 :SDL : 정적 텍스트 변수 만들기
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
클래스는 단지 텍스트를 만들고 화면에 퍼팅입니다. 어쨌든 numbers
이라는 std::map
을 다음과 같이 액세스 할 수 있습니다. Text::numbers["2"]
그러면이 경우 숫자 2로 표시 될 Text 개체가 반환됩니다. 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
의 시작 부분에 호출하고 나중에 타일 객체를 만들기 시작합니다. 어떤 제안? 감사.
아, 고마워. 나는'main'에서 대신 호출했고, 이제는 정상적으로 작동합니다. –