La zona de juego se dibuja en su propia textura

This commit is contained in:
2024-06-04 13:05:03 +02:00
parent baa2f3effd
commit e4c14b275f
4 changed files with 36 additions and 16 deletions

View File

@@ -46,6 +46,9 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
gameOverSprite = new Sprite(16, 80, 128, 96, gameOverTexture, renderer);
gameOverEndSprite = new Sprite(PLAY_AREA_CENTER_X - gameOverEndTexture->getWidth() / 2, 80, 128, 96, gameOverEndTexture, renderer);
canvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, playArea.w, playArea.h);
SDL_SetTextureBlendMode(canvas, SDL_BLENDMODE_BLEND);
// Inicializa las variables necesarias para la sección 'Game'
init();
}
@@ -141,6 +144,8 @@ Game::~Game()
delete gameOverSprite;
delete gameOverEndSprite;
SDL_DestroyTexture(canvas);
JA_DeleteSound(balloonSound);
JA_DeleteSound(bulletSound);
JA_DeleteSound(playerCollisionSound);
@@ -2684,17 +2689,18 @@ void Game::renderSeparator()
{
// Dibuja la linea que separa el marcador de la zona de juego
SDL_SetRenderDrawColor(renderer, separator.r, separator.g, separator.b, 255);
SDL_RenderDrawLine(renderer, PLAY_AREA_LEFT, PLAY_AREA_BOTTOM, PLAY_AREA_RIGHT, PLAY_AREA_BOTTOM);
SDL_RenderDrawLine(renderer, SCOREBOARD_X, SCOREBOARD_Y, SCOREBOARD_X + SCOREBOARD_WIDTH, SCOREBOARD_Y);
}
// Dibuja el juego
void Game::render()
{
// Prepara para empezar a dibujar en la textura de juego
screen->start();
//Dibujamos el contenido de la zona de juego en su textura
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, canvas);
// Limpia la pantalla
screen->clean(bgColor);
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_RenderClear(renderer);
// Dibuja los objetos
background->render();
@@ -2703,10 +2709,22 @@ void Game::render()
renderBalloons();
renderBullets();
renderMessages();
scoreboard->render();
renderSeparator();
renderPlayers();
// Deja el renderizador apuntando donde estaba
SDL_SetRenderTarget(renderer, temp);
// Prepara para empezar a dibujar en la textura de juego
screen->start();
// Limpia la pantalla
screen->clean(bgColor);
// Dibuja la zona de juego y el marcador
SDL_RenderCopy(renderer, canvas, nullptr, &playArea);
scoreboard->render();
//renderSeparator();
if ((deathCounter <= 150) && !players[0]->isAlive())
{
renderDeathFade(150 - deathCounter);