From 80e366b20890ee906b4d181930096cdf4829af9a Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Tue, 3 Dec 2024 13:59:40 +0100 Subject: [PATCH] Treballant en el zoom del titol s'ha arreglat el rebot dels globos i ara mola mes, o aixo pense --- source/balloon.cpp | 21 +++++---------------- source/texture.cpp | 12 ++++++++++-- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/source/balloon.cpp b/source/balloon.cpp index 1121646..887ff84 100644 --- a/source/balloon.cpp +++ b/source/balloon.cpp @@ -106,6 +106,7 @@ void Balloon::render() SDL_Point p = {24, 24}; sprite_->setRotatingCenter(&p); sprite_->render(); + // Añade la máscara del borde y los reflejos auto sp = std::make_unique(sprite_->getTexture(), sprite_->getPosition()); sp->setSpriteClip(BALLOON_SIZE[4], 0, BALLOON_SIZE[4], BALLOON_SIZE[4]); @@ -123,18 +124,8 @@ void Balloon::render() } else { - if (bouncing_.enabled) - { - // Renderizado con efecto de bouncing - sprite_->setPos(x_ + bouncing_.despX, y_ + bouncing_.despY); - sprite_->render(); - // sprite_->setPos(x_ - bouncing_.despX, y_ - bouncing_.despY); - } - else - { - // Renderizado normal - sprite_->render(); - } + // Renderizado normal + sprite_->render(); } } } @@ -388,12 +379,10 @@ void Balloon::updateBounce() zoomSprite(); - const auto spriteClip = sprite_->getSpriteClip(); - bouncing_.despX = spriteClip.w * (1.0f - bouncing_.zoomW); - bouncing_.despY = spriteClip.h * (1.0f - bouncing_.zoomH); - if (++bouncing_.counter / bouncing_.speed >= MAX_BOUNCE) + { disableBounce(); + } } } diff --git a/source/texture.cpp b/source/texture.cpp index 92df196..c906622 100644 --- a/source/texture.cpp +++ b/source/texture.cpp @@ -190,8 +190,16 @@ void Texture::render(int x, int y, SDL_Rect *clip, float zoomW, float zoomH, dou renderQuad.h = clip->h; } - renderQuad.w = renderQuad.w * zoomW; - renderQuad.h = renderQuad.h * zoomH; + // Calcula el zoom y las coordenadas + if (zoomH != 1.0f || zoomW != 1.0f) + { + renderQuad.x = renderQuad.x + (renderQuad.w / 2); + renderQuad.y = renderQuad.y + (renderQuad.h / 2); + renderQuad.w = renderQuad.w * zoomW; + renderQuad.h = renderQuad.h * zoomH; + renderQuad.x = renderQuad.x - (renderQuad.w / 2); + renderQuad.y = renderQuad.y - (renderQuad.h / 2); + } // Renderiza a pantalla SDL_RenderCopyEx(renderer_, texture_, clip, &renderQuad, angle, center, flip);