2014-04-10 2 views
-1

(SDL_ttf를 사용하여) 서페이스에 텍스트를 그린 다음 서페이스의 텍스트를 변경하고 싶습니다. 표면을 다시 그리면 텍스트가 사라지지 않습니다. 문제를 해결하는 방법에 대한 몇 가지 포럼 게시물을 살펴 봤지만 그 사실을 알 수없는 것 같습니다. 이 솔루션이 작동하지 않는 이유 특히 나는 이해할 수 없다 : 클래스 파일에서SDL 리셋 서페이스

선언 (이것은 단지 필수 제공하므로 코드가 긴) :

: 내 렌더링 함수의 시작에서

 SDL_Surface* box; // These two are initialised to the 
     SDL_Surface* boxCopy; // same image 

을 포인터와 (일반적으로 인정 하듯이 제한됩니다) C++의

 *box = *boxCopy; \\Reset box surface 

나의 이해는이 표면이 boxCopy가 가리키는 표면에 동일한 상자가 가리키는 만들어야한다고 제안합니다. 대신 boxCopy 서페이스는 상자의 복사본이됩니다. boxCopy가이 코드 줄로 어떻게 바뀔 수 있는지는 모르겠지만 그런 일이 일어나고있는 것처럼 보입니다. 그것은이에 그려 표면이 실제 텍스트가 업데이트 될 때마다이를 업데이트하는 것이 아니라 업데이트 할 때마다 텍스트를 업데이트하는 것이 더 쉽습니다 ..

+0

물론 떠나지 않습니다. 표면에 그림을 그려 넣으면 좋게 변경됩니다. 복사가 필요하면 SDL_CreateRGBSurface()를 사용하고 수동으로 픽셀 데이터를 복사하십시오. – this

답변

0

나는 내가 완전히 문제를 이해 모르겠지만 희망이 도움이 될 수 있습니다. 그것은 최적화 된 성능 현명하지 않을 수도 있지만 그것은 대부분의 경우에 더 쉽다고 말할 것입니다.

전형적인 프로그램 루프는 화면을 나타내는 서페이스의 재 렌더링과이 서페이스의 SDL_Flip을 포함합니다. 물론 최종 프레임 이후 실제로 업데이트 된 것을 렌더링 할 수 있도록 다시 렌더링을 최적화 할 수 있습니다. 아마 그게 너 일하고 있는거야? 그렇다면 아래의 방법을 사용하는 경우 새 텍스트는 이전 텍스트 전체가 아니라 새 텍스트의 크기 만 포함한다는 점을 알아야합니다. 보통 먼저 채워진 사각형을 그린 다음 새 텍스트를 그려서이 문제를 해결합니다.

void drawText(const char* string, int x, int y, 
       int fR, int fG, int fB, int bR, int bG, int bB) 
{ 
    SDL_Color foregroundColor = { fR, fG, fB }; 
    SDL_Color backgroundColor = { bR, bG, bB }; 
    SDL_Surface* textSurface = TTF_RenderText_Shaded(m_Font, string, 
                foregroundColor, 
                backgroundColor); 
    SDL_Rect textLocation = { x, y, 0, 0 }; 
    SDL_BlitSurface(textSurface, NULL, m_Screen, &textLocation);  
    SDL_FreeSurface(textSurface); 
} 
: 여기

는 텍스트 나 하나의 배경색을 갖는 간단한 경우에 (표면이 매 프레임 선별 대칭 여기 m_Screen 불리는) 표면 상에 그려 질 수있는 방법을 도시하는 TTF 예이다

m_Font = TTF_OpenFont("arial.ttf", size); 

그리고 이것은 정리에서 이루어집니다 :

이 (일부 적합한 글꼴로 크기를) DrawText에를 호출하기 전에 수행 된 것을

공지 사항

TTF_CloseFont(m_Font);