私は最初のゲームをすることにしました。それは単純になるでしょうが、私はc ++を使いたいので、学習のためにSDLを選びました。だから私の質問は、コードを書くときに「バッファ」がどのように扱われるかについてです。関連するコードを下部に投稿します。
さて、基本的に私が理解しているのは、SDLが実際に画面に描画されているバッファーを処理するということです。私がバッファに書き込んでいるとき、それは常に私が書き込んでいるバックバッファ、または現在画面に描画されていないバッファです。したがって、SDL_Flip(screen)を呼び出すと、画面の表面がバックバッファーに「ブリット」され、バッファーが描画されているポインターが、以前はバックバッファーであったバッファー、作業していたバッファーに移動します。現在表示されていた古いバッファがバックバッファになります。この時点で、SDL_FillRect(arguments)を呼び出すと、バックバッファで実行されますか?
質問を明確にするのに役立つかもしれないので、学習ゲームの「ハートビート」全体を投稿します。
//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;
}
}