diff --git a/source/director.cpp b/source/director.cpp index 54ff674..be91fdc 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -193,7 +193,7 @@ bool Director::initSDL() SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0xFF); // Establece el tamaño del buffer de renderizado - SDL_RenderSetLogicalSize(mRenderer, SCREEN_WIDTH, SCREEN_HEIGHT); + SDL_RenderSetLogicalSize(mRenderer, REAL_SCREEN_WIDTH, REAL_SCREEN_HEIGHT); // Establece el modo de mezcla SDL_SetRenderDrawBlendMode(mRenderer, SDL_BLENDMODE_BLEND); diff --git a/source/game.cpp b/source/game.cpp index 8c15855..0103399 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -3006,8 +3006,14 @@ void Game::shakeScreen() for (int n = 0; n < 8; n++) { // Limpia la pantalla - SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0xFF); - SDL_RenderClear(mRenderer); + //SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0xFF); + //SDL_RenderClear(mRenderer); + + // Prepara para empezar a dibujar en la textura de juego + mScreen->start(); + + // Limpia la pantalla + mScreen->clean(bgColor); // Dibuja los objetos mSpriteBackground->setPosX(0); @@ -3033,7 +3039,10 @@ void Game::shakeScreen() renderScoreBoard(); // Actualiza la pantalla - SDL_RenderPresent(mRenderer); + //SDL_RenderPresent(mRenderer); + + // Vuelca el contenido del renderizador en pantalla + mScreen->blit(); SDL_Delay(50); } } @@ -3090,8 +3099,14 @@ section_t Game::run() } // Limpia la pantalla - SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0xFF); - SDL_RenderClear(mRenderer); + //SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0xFF); + //SDL_RenderClear(mRenderer); + + // Prepara para empezar a dibujar en la textura de juego + mScreen->start(); + + // Limpia la pantalla + mScreen->clean(bgColor); // Dibuja los objetos renderPlayField(); @@ -3100,7 +3115,10 @@ section_t Game::run() renderDebugInfo(); // Actualiza la pantalla - SDL_RenderPresent(mRenderer); + //SDL_RenderPresent(mRenderer); + + // Vuelca el contenido del renderizador en pantalla + mScreen->blit(); } } @@ -3144,13 +3162,22 @@ void Game::runPausedGame() } } + // Prepara para empezar a dibujar en la textura de juego + mScreen->start(); + + // Limpia la pantalla + mScreen->clean(bgColor); + // Pinta el escenario renderPlayField(); mMenuPause->render(); mFade->render(); // Actualiza la pantalla - SDL_RenderPresent(mRenderer); + //SDL_RenderPresent(mRenderer); + + // Vuelca el contenido del renderizador en pantalla + mScreen->blit(); // Comprueba las entradas para el menu mMenuPause->checkInput(); @@ -3237,8 +3264,14 @@ void Game::runGameOverScreen() } // Limpia la pantalla - SDL_SetRenderDrawColor(mRenderer, 0x27, 0x27, 0x36, 0xFF); - SDL_RenderClear(mRenderer); + //SDL_SetRenderDrawColor(mRenderer, 0x27, 0x27, 0x36, 0xFF); + //SDL_RenderClear(mRenderer); + + // Prepara para empezar a dibujar en la textura de juego + mScreen->start(); + + // Limpia la pantalla + mScreen->clean(bgColor); // Dibuja los objetos if (mNumPlayers == 1) @@ -3257,7 +3290,10 @@ void Game::runGameOverScreen() mFade->render(); // Muestra la pantalla - SDL_RenderPresent(mRenderer); + //SDL_RenderPresent(mRenderer); + + // Vuelca el contenido del renderizador en pantalla + mScreen->blit(); // Comprueba las entradas para el menu mMenuGameOver->checkInput(); diff --git a/source/instructions.cpp b/source/instructions.cpp index 1880c3e..559b638 100644 --- a/source/instructions.cpp +++ b/source/instructions.cpp @@ -216,8 +216,14 @@ void Instructions::run(Uint8 mode) SDL_SetRenderTarget(mRenderer, nullptr); // Limpia el renderizador - SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); - SDL_RenderClear(mRenderer); + //SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); + //SDL_RenderClear(mRenderer); + + // Prepara para empezar a dibujar en la textura de juego + mScreen->start(); + + // Limpia la pantalla + mScreen->clean(bgColor); // Establece la ventana del backbuffer if (mode == INSTRUCTIONS_MODE_AUTO) @@ -229,6 +235,9 @@ void Instructions::run(Uint8 mode) SDL_RenderCopy(mRenderer, mBackbuffer, NULL, &window); // Dibuja el renderizador en pantalla - SDL_RenderPresent(mRenderer); + //SDL_RenderPresent(mRenderer); + + // Vuelca el contenido del renderizador en pantalla + mScreen->blit(); } } diff --git a/source/intro.cpp b/source/intro.cpp index 06dda84..1dc37a5 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -210,9 +210,9 @@ section_t Intro::run() { init(); - // Si la música no está sonando + // Si la música no está sonando la hace sonar if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED)) - JA_PlayMusic(mMusic, 0); // Reproduce la música + JA_PlayMusic(mMusic, 0); while (mSection.name == PROG_SECTION_INTRO) { @@ -233,7 +233,7 @@ section_t Intro::run() } } - // Calcula la lógica del bucle + // Actualiza las variables if (SDL_GetTicks() - mTicks > mTicksSpeed) { // Actualiza el contador de ticks diff --git a/source/screen.cpp b/source/screen.cpp index 8236054..69bc28c 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -8,14 +8,15 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer) mWindow = window; mRenderer = renderer; - mScreenWidth = 320;//REAL_SCREEN_WIDTH; - mScreenHeight = 240;//REAL_SCREEN_HEIGHT; - mGameCanvasWidth = 256;//SCREEN_WIDTH; - mGameCanvasHeight = 192;//SCREEN_HEIGHT; - mGameCanvasPosX = 0;//(REAL_SCREEN_WIDTH - SCREEN_WIDTH) / 2; - mGameCanvasPosY = 0;//(REAL_SCREEN_HEIGHT - SCREEN_HEIGHT) / 2; + mScreenWidth = REAL_SCREEN_WIDTH; + mScreenHeight = REAL_SCREEN_HEIGHT; + mGameCanvasWidth = SCREEN_WIDTH; + mGameCanvasHeight = SCREEN_HEIGHT; + mGameCanvasPosX = (mScreenWidth - mGameCanvasWidth) / 2; + mGameCanvasPosY = (mScreenHeight - mGameCanvasHeight) / 2; mBorderColor = {0x27, 0x27, 0x36}; + mBorderColor = {0x00, 0x00, 0x00}; // Crea la textura donde se dibujan los graficos del juego mGameCanvas = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, mGameCanvasWidth, mGameCanvasHeight); diff --git a/source/title.cpp b/source/title.cpp index 3415f2f..71b5636 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -557,8 +557,14 @@ section_t Title::run(Uint8 subsection) } // Limpia la pantalla - SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); - SDL_RenderClear(mRenderer); + //SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); + //SDL_RenderClear(mRenderer); + + // Prepara para empezar a dibujar en la textura de juego + mScreen->start(); + + // Limpia la pantalla + mScreen->clean(bgColor); // Dibuja el tileado de fondo SDL_RenderCopy(mRenderer, mBackground, &mBackgroundWindow, NULL); @@ -571,7 +577,10 @@ section_t Title::run(Uint8 subsection) mCrisisBitmap->render(); // Actualiza la pantalla - SDL_RenderPresent(mRenderer); + //SDL_RenderPresent(mRenderer); + + // Vuelca el contenido del renderizador en pantalla + mScreen->blit(); // Si los objetos han llegado a su destino, cambiamos de Sección if ((mEvents[0] == EVENT_COMPLETED) && (mEvents[0] == EVENT_COMPLETED)) @@ -609,8 +618,14 @@ section_t Title::run(Uint8 subsection) for (int n = 0; n < 11 * 3; n++) { // Limpia la pantalla - SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); - SDL_RenderClear(mRenderer); + //SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); + //SDL_RenderClear(mRenderer); + + // Prepara para empezar a dibujar en la textura de juego + mScreen->start(); + + // Limpia la pantalla + mScreen->clean(bgColor); // Dibuja el tileado de fondo SDL_RenderCopy(mRenderer, mBackground, &mBackgroundWindow, NULL); @@ -629,7 +644,10 @@ section_t Title::run(Uint8 subsection) mDustBitmapL->render(); // Actualiza la pantalla - SDL_RenderPresent(mRenderer); + //SDL_RenderPresent(mRenderer); + + // Vuelca el contenido del renderizador en pantalla + mScreen->blit(); } mSection.subsection = TITLE_SECTION_3; @@ -847,8 +865,14 @@ section_t Title::run(Uint8 subsection) } // Limpia la pantalla - SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); - SDL_RenderClear(mRenderer); + //SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); + //SDL_RenderClear(mRenderer); + + // Prepara para empezar a dibujar en la textura de juego + mScreen->start(); + + // Limpia la pantalla + mScreen->clean(bgColor); // Dibuja el tileado de fondo SDL_RenderCopy(mRenderer, mBackground, &mBackgroundWindow, NULL); @@ -883,7 +907,10 @@ section_t Title::run(Uint8 subsection) mFade->render(); // Actualiza la pantalla - SDL_RenderPresent(mRenderer); + //SDL_RenderPresent(mRenderer); + + // Vuelca el contenido del renderizador en pantalla + mScreen->blit(); } else if (mCounter == 0) {