2012-10-27 2 views
1

저는 기본적으로 C++의 초보자입니다.하지만 while 루프에있는 문자열을 업데이트하는 방법을 찾고 있었습니까?루프에서 텍스트를 업데이트하는 방법은 무엇입니까?

현재 루프의 모든 반복은 텍스트를 이전의 여전히 기본적으로 흰색의 흐림 효과 위에 씁니다.

while(!quit){ 
    while(SDL_PollEvent(&event)){ 
     switch(event.type){ 
      case SDL_QUIT: quit = true; break; 
      case SDL_MOUSEMOTION: handle_mouse_position(); 
     } 
    } 

    SDL_Rect offset; 
    offset.x = 400; 
    offset.y = 290; 

    std::stringstream s; 
    s << "Mouse xpos: " << mouseX << " Mouse ypos: " << mouseY; 

    font_surface = TTF_RenderText_Solid(font,s.str().c_str(),font_color); 
    SDL_BlitSurface(font_surface, NULL, screen, &offset); 

    //Update the screen 
    if(SDL_Flip(screen) == -1) { 
     return 1;  
    } 
} 

가 명확하게 마우스 위치를 표시 할 수 있도록 각 루프를 이전 텍스트 출력을 취소하고 업데이트하는 몇 가지 방법이 있나요 :

이 내 루프와 메신저 테스트이다?

답변

0

매번 모든 것을 다시 그리거나 배경이 단색이면 사각형을 칠하고 그 위에 텍스트를 그립니다.

두 번째 것이 더 효율적입니다. 그러나 복잡한 시나리오가 있다면 레이어로 작업하는 것이 좋습니다. 처음에는 맨 아래 레이어를 그리고 두 번째 레이어는 렌더링합니다. 레이어를 만들면 배경을 그리는 background()과 포그 라운드를 그리는 foreground()을 가질 수 있습니다. 그러면 무엇을 가질 수 있습니까?

while (main_loop) { 
    background(); 
    foreground(); 
} 

따라서 복잡한 시나리오를 쉽게 처리 할 수 ​​있습니다.

+0

어느 것이 더 효율적이며 어떻게 구문을 사용합니까? – Sir

+0

두 번째 것이 더 효율적입니다. 그러나 복잡한 시나리오가 있다면 레이어로 작업하는 것이 좋습니다. 처음에는 맨 아래 레이어를 그리고 두번째 레이어를 렌더링합니다. –

+0

나는 이것을 시도했습니다 :'font_color SDL_MapRGB (SDL_PixelFormat, 92,132,205); SDL_FillRect (font_surface, offset, font_color);'행복하지 않다 =/ – Sir

1

다시 그리기 사이에 화면을 지우지 않으므로 이미 그린 텍스트 (또는 그 밖의 것들)를 칠하기 만하면됩니다. 그러면 말처럼 "흐리게 흐리게 처리됩니다".

예를 들어, 모든 프레임마다 화면에 채우기를 시도하십시오.

추가 참고 사항 : font_surface -> memory leak을 해제하지 않은 것으로 보입니다.

+0

올바른 구문은 무엇입니까? 작동하지 않는 것 같습니다./ – Sir

+0

그 색상은 없습니다. 운동 =/내가 원하는 특정 색상에 대한 형식. – Sir

+0

색상을 찾으려면 다음을 수행하십시오. __font_color = SDL_MapRGB (screen-> format, 0xFF, 0x00, 0x00); __ – aaronps

관련 문제