2009-10-21 4 views
3

지금 당분간이 온라인을 찾으려고 노력하고 있습니다.SDL_Surface를 다른 것으로 대체하려면 어떻게합니까?

일부 내용 (하나는 텍스트, 다른 하나는 스프라이트의 일부)이있는 SDL_Surface가 있습니다. 게임 루프 내부에서 데이터를 화면에 잘 표시합니다. 그러나 다시 반복되고 이전 데이터를 대체하지는 않지만 이전 데이터를 덮어 씁니다. 따라서 텍스트의 경우에는 엉망이됩니다.

SDL_FreeSurface를 시도했지만 작동하지 않았습니다. 다른 방법을 알고 있습니까?

fpsStream.str(""); 
fpsStream << fps.get_ticks(); 
fpsString = fpsStream.str(); 

game.fpsSurface = TTF_RenderText_Solid(game.fpsFont, fpsString.c_str(), textColor); 
game.BlitSurface(0, 0, game.fpsSurface, game.screen); 
+0

SDL_FillRect() 함수를 수행 중이십니까? 그렇지 않다면 질문에 세부 정보를 추가하거나 코드를 보여주십시오. – Artelius

+0

그래서 FillRect로 Surface를 채운 다음 다시 써야합니까? –

+0

@ Ólafur Waage : 네, 그건 꽤 생각입니다. –

답변

7

루프 시작 부분에 SDL_FillRect(screen, NULL, 0x000000);
과 같은 코드를 입력하십시오.

+0

이것은 표면층을 약간 땜질 한 후에 작동합니다. 감사. –

1

나는 보통 차 표면에 그리는 일을 (즉, 메모리 내 화면이 아니다 표면) 다음 SDL_BlitSurface이 화면에 복사 할 준비가되면. 다음 반복에서 전체 보조 버퍼 (SDL_FillRect)를 지우고 모든면을 다시 그리거나 전체면을 잃고 싶지 않고 사각형 만 변경하려는 경우 일부만 다시 그릴 수 있습니다.

이렇게하면 더블 버퍼링을 사용하고 깜박임을 방지 할 수 있습니다. 또한 블리 팅 후 SDL_UpdateRects을 잊지 마세요.

2

투명도 (예 : SDL_ttf의 항목)를 그리는 경우 텍스트 사이의 투명 영역이 변경되지 않으므로 이전 쓰기가 유지됩니다. 프로그램에서 프레임 버퍼를 지우고 프레임 당 한 번 전체 장면을 다시 그려야하기 때문에 일반적으로 문제가되지 않습니다. 옛날에는 화면의 '더러운'부분 만 다시 그리는 것이 일반적 이었지만 이제는 그렇게 일반적이지 않습니다.

+0

재미있는 것들. 감사. –