Trabajando en la clase screen. Ya pone borde en la pantalla

This commit is contained in:
2021-09-08 23:12:08 +02:00
parent 726a1b3064
commit 850b4e2a12
6 changed files with 53 additions and 11 deletions

View File

@@ -15,12 +15,16 @@
#define HALF_BLOCK 4 #define HALF_BLOCK 4
// Tamaño de la pantalla real // Tamaño de la pantalla real
#define REAL_SCREEN_WIDTH 320
#define REAL_SCREEN_HEIGHT 240
// Tamaño de la pantalla virtual
#define SCREEN_WIDTH 256 #define SCREEN_WIDTH 256
#define SCREEN_HEIGHT 192 #define SCREEN_HEIGHT 192
// Tamaño de la pantalla que se muestra // Tamaño de la pantalla que se muestra
const int VIEW_WIDTH = SCREEN_WIDTH * 3; const int VIEW_WIDTH = REAL_SCREEN_WIDTH * 3;
const int VIEW_HEIGHT = SCREEN_HEIGHT * 3; const int VIEW_HEIGHT = REAL_SCREEN_HEIGHT * 3;
// Zona de juego // Zona de juego
const int PLAY_AREA_TOP = (0 * BLOCK); const int PLAY_AREA_TOP = (0 * BLOCK);

View File

@@ -49,7 +49,7 @@ Director::Director(std::string path)
// Aplica las opciones // Aplica las opciones
SDL_SetWindowFullscreen(mWindow, mOptions->fullScreenMode); SDL_SetWindowFullscreen(mWindow, mOptions->fullScreenMode);
SDL_SetWindowSize(mWindow, SCREEN_WIDTH * mOptions->windowSize, SCREEN_HEIGHT * mOptions->windowSize); SDL_SetWindowSize(mWindow, REAL_SCREEN_WIDTH * mOptions->windowSize, REAL_SCREEN_HEIGHT * mOptions->windowSize);
mLang->setLang(mOptions->language); mLang->setLang(mOptions->language);
// Inicializa el resto de variables // Inicializa el resto de variables
@@ -172,7 +172,7 @@ bool Director::initSDL()
SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0xFF); SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0xFF);
// Establece el tamaño del buffer de renderizado // 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 // Establece el modo de mezcla
SDL_SetRenderDrawBlendMode(mRenderer, SDL_BLENDMODE_BLEND); SDL_SetRenderDrawBlendMode(mRenderer, SDL_BLENDMODE_BLEND);
@@ -352,7 +352,7 @@ void Director::runTitle()
void Director::runGame() void Director::runGame()
{ {
mGame = new Game(mRenderer, mAsset, mLang, mInput); mGame = new Game(mWindow, mRenderer, mAsset, mLang, mInput);
setSection(mGame->run()); setSection(mGame->run());
delete mGame; delete mGame;
} }

View File

@@ -1,7 +1,7 @@
#include "game.h" #include "game.h"
// Constructor // Constructor
Game::Game(SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input) Game::Game(SDL_Window *window,SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input)
{ {
// Copia los punteros // Copia los punteros
mRenderer = renderer; mRenderer = renderer;
@@ -9,7 +9,7 @@ Game::Game(SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input)
mLang = lang; mLang = lang;
mInput = input; mInput = input;
mScreen = new Screen(renderer); mScreen = new Screen(window, renderer);
mEventHandler = new SDL_Event(); mEventHandler = new SDL_Event();
mTextureText = new LTexture(); mTextureText = new LTexture();
mText = new Text(mAsset->get("nokia2.txt"), mTextureText, renderer); mText = new Text(mAsset->get("nokia2.txt"), mTextureText, renderer);
@@ -95,7 +95,12 @@ section_t Game::run()
// Limpia la pantalla // Limpia la pantalla
mScreen->clean(); mScreen->clean();
mText->writeCentered(SCREEN_CENTER_X, SCREEN_CENTER_Y, "Pepe el Cazavampiros", 0); // Medidas de ancho y alto de la pantalla
mText->writeCentered(SCREEN_CENTER_X, 0, std::to_string(SCREEN_WIDTH), -1);
mText->write(0, SCREEN_CENTER_Y - (mText->getCharacterWidth() / 2), std::to_string(SCREEN_HEIGHT), -1);
// Texto en el centro de la pantalla
mText->writeCentered(SCREEN_CENTER_X, SCREEN_CENTER_Y - (mText->getCharacterWidth() / 2), "Pepe el Cazavampiros", -1);
// Actualiza la pantalla // Actualiza la pantalla
mScreen->blit(); mScreen->blit();

View File

@@ -45,7 +45,7 @@ private:
public: public:
// Constructor // Constructor
Game(SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input); Game(SDL_Window *window,SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input);
// Destructor // Destructor
~Game(); ~Game();

View File

@@ -1,9 +1,22 @@
#include "screen.h" #include "screen.h"
#include "const.h"
// Constructor // Constructor
Screen::Screen(SDL_Renderer *renderer) Screen::Screen(SDL_Window *window, SDL_Renderer *renderer)
{ {
mWindow = window;
mRenderer = renderer; mRenderer = renderer;
mRealScreenWidth = REAL_SCREEN_WIDTH;
mRealScreenHeight = REAL_SCREEN_HEIGHT;
mScreenWidth = SCREEN_WIDTH;
mScreenHeight = SCREEN_HEIGHT;
mBorderX = (REAL_SCREEN_WIDTH - SCREEN_WIDTH) / 2;
mBorderY = (REAL_SCREEN_HEIGHT - SCREEN_HEIGHT) / 2;
mGameCanvas = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, SCREEN_WIDTH, SCREEN_HEIGHT);
if (mGameCanvas == NULL)
printf("TitleSurface could not be created!\nSDL Error: %s\n", SDL_GetError());
} }
// Destructor // Destructor
@@ -15,6 +28,10 @@ Screen::~Screen()
// Limpia la pantalla // Limpia la pantalla
void Screen::clean() void Screen::clean()
{ {
SDL_SetRenderDrawColor(mRenderer, 0x27, 0x27, 0x36, 0xFF);
SDL_RenderClear(mRenderer);
SDL_SetRenderTarget(mRenderer, mGameCanvas);
SDL_SetRenderDrawColor(mRenderer, 0xAA, 0x44, 0x44, 0xFF); SDL_SetRenderDrawColor(mRenderer, 0xAA, 0x44, 0x44, 0xFF);
SDL_RenderClear(mRenderer); SDL_RenderClear(mRenderer);
} }
@@ -22,5 +39,12 @@ void Screen::clean()
// Vuelca el contenido del renderizador en pantalla // Vuelca el contenido del renderizador en pantalla
void Screen::blit() void Screen::blit()
{ {
SDL_Rect src = {0, 0, SCREEN_WIDTH, SCREEN_HEIGHT};
SDL_Rect dest = {mBorderX, mBorderY, SCREEN_WIDTH, SCREEN_HEIGHT};
SDL_SetRenderTarget(mRenderer, NULL);
SDL_RenderCopy(mRenderer, mGameCanvas, NULL, &dest);
SDL_RenderPresent(mRenderer); SDL_RenderPresent(mRenderer);
} }

View File

@@ -8,11 +8,20 @@
class Screen class Screen
{ {
private: private:
SDL_Window *mWindow; // Ventana de la aplicación
SDL_Renderer *mRenderer; // El renderizador de la ventana SDL_Renderer *mRenderer; // El renderizador de la ventana
SDL_Texture *mGameCanvas; // Textura para completar la ventana de juego hasta la pantalla completa
int mRealScreenWidth;
int mRealScreenHeight;
int mScreenWidth;
int mScreenHeight;
int mBorderX;
int mBorderY;
public: public:
// Constructor // Constructor
Screen(SDL_Renderer *renderer); Screen(SDL_Window *windows, SDL_Renderer *renderer);
// Destructor // Destructor
~Screen(); ~Screen();