2016-11-25 17 views
0

저는 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의 시작 부분에 호출하고 나중에 타일 객체를 만들기 시작합니다. 어떤 제안? 감사.

답변

1

Text 개체가 생성 될 때 호출됩니다. 해당 생성자를 사용하는 Text 개체를 만들지 않으면 numbers 초기화가 발생하지 않습니다.

Text::initNumbers은 다른 응용 프로그램 초기화 코드와 함께 다른 곳에서 호출해야합니다.

+0

아, 고마워. 나는'main'에서 대신 호출했고, 이제는 정상적으로 작동합니다. –