문제

나는 첫 번째 게임을하기로 결심하고 있습니다. 간단 할 것입니다. 그러나 C ++를 사용하고 싶고 학습을 위해 SDL을 선택했습니다. 따라서 제 질문은 코드를 작성할 때 "버퍼"가 처리되는 방법에 관한 것입니다. 내 관련 코드를 맨 아래에 게시하겠습니다.

좋아, 기본적으로 내가 이해하는 방식은 SDL이 실제로 화면에 어떤 버퍼를 그려야하는지 관리한다는 것입니다. 버퍼에 글을 쓸 때는 항상 내가 쓰고있는 백 버퍼 또는 현재 화면에 그려지지 않는 버퍼입니다. 따라서 SDL_FLIP (스크린)을 호출 할 때 화면 표면을 백 버퍼에 "블리트"하고, 포인터를 포인터로 이동하여 백부퍼, 내가 작업했던 것, 그리고 작업했던 버퍼로 그려진 버퍼에 그려집니다. 이제 보여준 오래된 버퍼는 백 버퍼가됩니다. 이 시점에서 SDL_FILLRECT (Arguments) 호출하면 Now Back Buffer에서 수행됩니까?

내 질문을 명확히하는 데 도움이 될 수 있으므로 학습 게임의 "하트 비트"전체를 게시 할 것입니다.

//While the user hasn't quit
while( quit == false )
{
    //If there's an event to handle
    if( SDL_PollEvent( &event ) )
    {
        //If a key was pressed
        if( event.type == SDL_KEYDOWN )
        {
            //Set the proper message surface
            switch( event.key.keysym.sym )
            {
                case SDLK_UP: message = upMessage; break;
                case SDLK_DOWN: message = downMessage; break;
                case SDLK_LEFT: message = leftMessage; break;
                case SDLK_RIGHT: message = rightMessage; break;
            }
        }

        else if( event.type == SDL_QUIT ) //if the user clicks the little X in the upper right corner.
        {
            quit = true;
        }
    }

    //If a message needs to be displayed
 if( message != NULL )
 {
      // Clear the back buffer.
      SDL_FillRect( SDL_GetVideoSurface(), NULL, 0 );

      //Draw the backgroudn to the back buffer.
      apply_surface( 0, 0, background, screen );

      // Draw the "message" to the back buffer.
      apply_surface( ( SCREEN_WIDTH - message->w ) / 2, ( SCREEN_HEIGHT - message->h ) / 2, message, screen );

      //Null the surface pointer
      message = NULL;
    }

    //Swap the current and back buffer.
    if( SDL_Flip( screen ) == -1 )
    {
        return 1;
    }
}
도움이 되었습니까?

해결책

시스템 (예 : X11, Linux 프레임 버퍼, Windows) 및 백엔드 SDL이 상호 작용하는 데 사용됩니다. 또한 SDL_SETVIDEOMODE로 전달하는 플래그도 있습니다. 기본적으로 귀하의 메모리 영역에 앉아있는 소프트웨어 표면이 있으며 그래픽 카드의 메모리에 배치되는 하드웨어 표면이 있습니다. 당신이 설명하는 것은 나에게 더블 버퍼 인 것 같습니다. sdl_hwsurface를 통과하면 활성화 | sdl_doublebuf to sdl. 이것이 모든 플랫폼과 구성에서 지원되는 것은 아니며 대신 다른 것을 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top