Sprite: Se peude establecer el nivel de zoom en ancho y alto

This commit is contained in:
2023-05-07 12:55:32 +02:00
parent 3ba5f6cce0
commit 7725f8ab3e
6 changed files with 73 additions and 12 deletions

View File

@@ -90,8 +90,8 @@ int main(int argc, char *argv[])
MovingSprite *sprite = new MovingSprite(); MovingSprite *sprite = new MovingSprite();
sprite->setRenderer(renderer); sprite->setRenderer(renderer);
sprite->setTexture(texture); sprite->setTexture(texture);
sprite->setPosX(0); sprite->setPosX(140);
sprite->setPosY(0); sprite->setPosY(100);
sprite->setWidth(16); sprite->setWidth(16);
sprite->setHeight(32); sprite->setHeight(32);
sprite->setSpriteClip({0, 0, 16, 32}); sprite->setSpriteClip({0, 0, 16, 32});
@@ -116,6 +116,9 @@ int main(int argc, char *argv[])
{ {
switch (event->key.keysym.scancode) switch (event->key.keysym.scancode)
{ {
case SDL_SCANCODE_N:
screen->showNotification("Ejemplo de", "notificacion", 1);
break;
default: default:
break; break;
@@ -168,7 +171,7 @@ int main(int argc, char *argv[])
sprite->update(); sprite->update();
// Actualiza el degradado // Actualiza el degradado
// if (counter % 4 == 0) if (counter % 1 == 0)
{ {
gradBreathDirection == 0 ? gradCurrentColor-- : gradCurrentColor++; gradBreathDirection == 0 ? gradCurrentColor-- : gradCurrentColor++;
if (gradCurrentColor == gradColorMin) if (gradCurrentColor == gradColorMin)
@@ -183,10 +186,9 @@ int main(int argc, char *argv[])
} }
// Dibuja en pantalla // Dibuja en pantalla
//SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
//SDL_RenderClear(renderer);
screen->start(); screen->start();
screen->clean(); screen->clean();
// Dibuja un degradado de fondo // Dibuja un degradado de fondo
const int gradFirstLine = options->gameHeight / 3; const int gradFirstLine = options->gameHeight / 3;
const int gradLastLine = options->gameHeight; const int gradLastLine = options->gameHeight;
@@ -200,12 +202,17 @@ int main(int argc, char *argv[])
SDL_SetRenderDrawColor(renderer, color, 0x00, 0x00, 0xFF); SDL_SetRenderDrawColor(renderer, color, 0x00, 0x00, 0xFF);
SDL_RenderDrawLine(renderer, 0, i, options->gameWidth, i); SDL_RenderDrawLine(renderer, 0, i, options->gameWidth, i);
} }
// Escribe el texto // Escribe el texto
text->setZoom(2);
text->writeCentered(options->gameWidth / 2, text->getCharacterSize(), "Jail Engine DEMO"); text->writeCentered(options->gameWidth / 2, text->getCharacterSize(), "Jail Engine DEMO");
text->disableZoom();
text->writeCentered(options->gameWidth / 2, text->getCharacterSize() * 6, "Pulsa 'N' para mostrar una notificacion");
// Dibuja el sprite // Dibuja el sprite
sprite->render(); sprite->render();
// Vuelca el buffer en pantalla // Vuelca el buffer en pantalla
//SDL_RenderPresent(renderer);
screen->blit(); screen->blit();
} }

View File

@@ -414,16 +414,16 @@ void Screen::showNotification(std::string text1, std::string text2, int icon)
// Dibuja las notificaciones // Dibuja las notificaciones
void Screen::renderNotifications() void Screen::renderNotifications()
{ {
if (notifyAdded) //if (notifyAdded)
{ {
if (!notifyActive) if (!notifyActive)
{ {
return; return;
} }
SDL_RenderSetLogicalSize(renderer, notificationLogicalWidth, notificationLogicalHeight); //SDL_RenderSetLogicalSize(renderer, notificationLogicalWidth, notificationLogicalHeight);
notify->render(); notify->render();
SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight); //SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight);
} }
} }

View File

@@ -22,6 +22,8 @@ Sprite::Sprite(int x, int y, int w, int h, Texture *texture, SDL_Renderer *rende
// Inicializa variables // Inicializa variables
enabled = true; enabled = true;
zoomW = 1.0f;
zoomH = 1.0f;
} }
Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer) Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer)
@@ -45,6 +47,8 @@ Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer)
// Inicializa variables // Inicializa variables
enabled = true; enabled = true;
zoomW = 1.0f;
zoomH = 1.0f;
} }
// Muestra el sprite por pantalla // Muestra el sprite por pantalla
@@ -52,7 +56,7 @@ void Sprite::render()
{ {
if (enabled) if (enabled)
{ {
texture->render(renderer, x, y, &spriteClip); texture->render(renderer, x, y, &spriteClip, zoomW, zoomH);
} }
} }
@@ -199,3 +203,15 @@ void Sprite::setRect(SDL_Rect rect)
w = rect.w; w = rect.w;
h = rect.h; h = rect.h;
} }
// Establece el nivel de zoom en horizontal
void Sprite::setZoomW(float value)
{
zoomW = value;
}
// Establece el nivel de zoom en vertical
void Sprite::setZoomH(float value)
{
zoomH = value;
}

View File

@@ -21,6 +21,8 @@ protected:
int h; // Alto del sprite int h; // Alto del sprite
SDL_Rect spriteClip; // Rectangulo de origen de la textura que se dibujará en pantalla SDL_Rect spriteClip; // Rectangulo de origen de la textura que se dibujará en pantalla
bool enabled; // Indica si el sprite esta habilitado bool enabled; // Indica si el sprite esta habilitado
float zoomW; // Cantidad de zoom en horizontal a aplicar al sprite
float zoomH; // Cantidad de zoom en verical a aplicar al sprite
public: public:
// Constructor // Constructor
@@ -95,6 +97,12 @@ public:
// Establece los valores de posición y tamaño del sprite // Establece los valores de posición y tamaño del sprite
void setRect(SDL_Rect rect); void setRect(SDL_Rect rect);
// Establece el nivel de zoom en horizontal
void setZoomW(float value);
// Establece el nivel de zoom en vertical
void setZoomH(float value);
}; };
#endif #endif

View File

@@ -98,6 +98,7 @@ Text::Text(string textFile, string bitmapFile, SDL_Renderer *renderer)
// Inicializa variables // Inicializa variables
fixedWidth = false; fixedWidth = false;
zoom = 1;
} }
// Constructor // Constructor
@@ -121,6 +122,7 @@ Text::Text(string textFile, Texture *texture, SDL_Renderer *renderer)
// Inicializa variables // Inicializa variables
fixedWidth = false; fixedWidth = false;
zoom = 1;
} }
// Constructor // Constructor
@@ -141,6 +143,7 @@ Text::Text(textFile_t *textFile, Texture *texture, SDL_Renderer *renderer)
// Inicializa variables // Inicializa variables
fixedWidth = false; fixedWidth = false;
zoom = 1;
} }
// Destructor // Destructor
@@ -168,7 +171,7 @@ void Text::write(int x, int y, string text, int kerning, int lenght)
sprite->setPosY(y); sprite->setPosY(y);
sprite->render(); sprite->render();
// shift += (offset[int(text[i])].w + kerning); // shift += (offset[int(text[i])].w + kerning);
shift += fixedWidth ? boxWidth : (offset[int(text[i])].w + kerning); shift += fixedWidth ? boxWidth * zoom : (offset[int(text[i])].w + kerning) * zoom;
} }
} }
@@ -267,3 +270,23 @@ void Text::setFixedWidth(bool value)
{ {
fixedWidth = value; fixedWidth = value;
} }
// Establece el tamaño del zoom
void Text::setZoom(int value)
{
if (value < 1)
{
value = 1;
}
zoom = value;
sprite->setZoomW(zoom);
sprite->setZoomH(zoom);
}
// Quita el zoom
void Text::disableZoom()
{
zoom = 1;
sprite->setZoomW(zoom);
sprite->setZoomH(zoom);
}

View File

@@ -37,6 +37,7 @@ private:
Sprite *sprite; // Objeto para dibujar el texto Sprite *sprite; // Objeto para dibujar el texto
// Variables // Variables
int zoom; // Tamaño del texto
int boxWidth; // Anchura de la caja de cada caracter en el png int boxWidth; // Anchura de la caja de cada caracter en el png
int boxHeight; // Altura de la caja de cada caracter en el png int boxHeight; // Altura de la caja de cada caracter en el png
bool fixedWidth; // Indica si el texto se ha de escribir con longitud fija en todas las letras bool fixedWidth; // Indica si el texto se ha de escribir con longitud fija en todas las letras
@@ -77,6 +78,12 @@ public:
// Establece si se usa un tamaño fijo de letra // Establece si se usa un tamaño fijo de letra
void setFixedWidth(bool value); void setFixedWidth(bool value);
// Establece el tamaño del zoom
void setZoom(int value);
// Quita el zoom
void disableZoom();
}; };
#endif #endif