Separados los elementos de la pantalla en diferentes texturas
This commit is contained in:
@@ -20,6 +20,12 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
|
||||
enemyEngine = new EnemyEngine(renderer, asset, player, map, asset->get(map->getEnemyFile()));
|
||||
music = JA_LoadMusic(asset->get("music_surface.ogg").c_str());
|
||||
|
||||
// Crea la textura para dibujar los sprites
|
||||
spriteLayer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, PLAY_AREA_WIDTH, PLAY_AREA_HEIGHT);
|
||||
if (spriteLayer == nullptr)
|
||||
printf("Error: map_layer0 could not be created!\nSDL Error: %s\n", SDL_GetError());
|
||||
SDL_SetTextureBlendMode(spriteLayer, SDL_BLENDMODE_BLEND);
|
||||
|
||||
// Inicializa variables
|
||||
ticks = 0;
|
||||
ticksSpeed = 15;
|
||||
@@ -36,6 +42,8 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
|
||||
// Destructor
|
||||
Game::~Game()
|
||||
{
|
||||
SDL_DestroyTexture(spriteLayer);
|
||||
|
||||
delete scoreboard;
|
||||
delete eventHandler;
|
||||
delete itemTracker;
|
||||
@@ -96,21 +104,58 @@ void Game::update()
|
||||
// Pinta los objetos en pantalla
|
||||
void Game::render()
|
||||
{
|
||||
// Rellena las texturas
|
||||
fillSpriteTexture();
|
||||
scoreboard->fillTexture();
|
||||
|
||||
// Prepara para dibujar el frame
|
||||
screen->start();
|
||||
screen->clean();
|
||||
|
||||
// Dibuja los objetos
|
||||
map->render();
|
||||
enemyEngine->render();
|
||||
player->render();
|
||||
// Dibuja la capa 0
|
||||
map->renderLayer0();
|
||||
|
||||
// Dibuja la capa 1
|
||||
map->renderLayer1();
|
||||
|
||||
// Dibuja la capa de sprites
|
||||
renderSprites();
|
||||
|
||||
// Dibuja el marcador
|
||||
scoreboard->render();
|
||||
|
||||
// Dibuja la información de debug
|
||||
renderDebugInfo();
|
||||
|
||||
// Actualiza la pantalla
|
||||
screen->blit();
|
||||
}
|
||||
|
||||
// Dibuja los sprites en la textura
|
||||
void Game::fillSpriteTexture()
|
||||
{
|
||||
// Cambia el puntero del renderizador a la textura y la limpia
|
||||
SDL_SetRenderTarget(renderer, spriteLayer);
|
||||
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
|
||||
SDL_RenderClear(renderer);
|
||||
|
||||
// Dibuja los sprites en la textura
|
||||
map->renderActors();
|
||||
enemyEngine->render();
|
||||
player->render();
|
||||
|
||||
// Vuelve a colocar el renderizador apuntando a la pantalla
|
||||
SDL_SetRenderTarget(renderer, nullptr);
|
||||
}
|
||||
|
||||
// Dibuja los sprites
|
||||
void Game::renderSprites()
|
||||
{
|
||||
// Copia la textura al renderizador
|
||||
SDL_Rect rect = {PLAY_AREA_X, PLAY_AREA_Y, PLAY_AREA_WIDTH, PLAY_AREA_HEIGHT};
|
||||
SDL_RenderCopy(renderer, spriteLayer, NULL, &rect);
|
||||
}
|
||||
|
||||
// Comprueba los eventos de la cola
|
||||
void Game::checkEventHandler()
|
||||
{
|
||||
@@ -218,12 +263,13 @@ void Game::renderDebugInfo()
|
||||
}
|
||||
|
||||
// Pinta mascaras
|
||||
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 128);
|
||||
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 192);
|
||||
SDL_Rect rect = player->sprite->getRect();
|
||||
rect.y += SCOREBOARD_HEIGHT;
|
||||
SDL_RenderFillRect(renderer, &rect);
|
||||
|
||||
// Pinta el texto
|
||||
debug->setPos({1, PLAY_AREA_TOP});
|
||||
debug->setPos({1, 1 + SCOREBOARD_HEIGHT});
|
||||
debug->render();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user