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

View File

@@ -414,16 +414,16 @@ void Screen::showNotification(std::string text1, std::string text2, int icon)
// Dibuja las notificaciones
void Screen::renderNotifications()
{
if (notifyAdded)
//if (notifyAdded)
{
if (!notifyActive)
{
return;
}
SDL_RenderSetLogicalSize(renderer, notificationLogicalWidth, notificationLogicalHeight);
//SDL_RenderSetLogicalSize(renderer, notificationLogicalWidth, notificationLogicalHeight);
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
enabled = true;
zoomW = 1.0f;
zoomH = 1.0f;
}
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
enabled = true;
zoomW = 1.0f;
zoomH = 1.0f;
}
// Muestra el sprite por pantalla
@@ -52,7 +56,7 @@ void Sprite::render()
{
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;
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
SDL_Rect spriteClip; // Rectangulo de origen de la textura que se dibujará en pantalla
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:
// Constructor
@@ -95,6 +97,12 @@ public:
// Establece los valores de posición y tamaño del sprite
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

View File

@@ -98,6 +98,7 @@ Text::Text(string textFile, string bitmapFile, SDL_Renderer *renderer)
// Inicializa variables
fixedWidth = false;
zoom = 1;
}
// Constructor
@@ -121,6 +122,7 @@ Text::Text(string textFile, Texture *texture, SDL_Renderer *renderer)
// Inicializa variables
fixedWidth = false;
zoom = 1;
}
// Constructor
@@ -141,6 +143,7 @@ Text::Text(textFile_t *textFile, Texture *texture, SDL_Renderer *renderer)
// Inicializa variables
fixedWidth = false;
zoom = 1;
}
// Destructor
@@ -168,7 +171,7 @@ void Text::write(int x, int y, string text, int kerning, int lenght)
sprite->setPosY(y);
sprite->render();
// 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;
}
// 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
// Variables
int zoom; // Tamaño del texto
int boxWidth; // Anchura 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
@@ -77,6 +78,12 @@ public:
// Establece si se usa un tamaño fijo de letra
void setFixedWidth(bool value);
// Establece el tamaño del zoom
void setZoom(int value);
// Quita el zoom
void disableZoom();
};
#endif