fix: updateAlphaColorTexture() en Background class per a utilitzar delta_time
This commit is contained in:
@@ -143,7 +143,7 @@ void Background::update(float delta_time) {
|
||||
}
|
||||
|
||||
// Actualiza el valor de alpha
|
||||
updateAlphaColorTexture();
|
||||
updateAlphaColorTexture(delta_time);
|
||||
|
||||
// Actualiza las nubes
|
||||
updateClouds(delta_time);
|
||||
@@ -488,13 +488,39 @@ void Background::setAlpha(int alpha) {
|
||||
alpha_color_texture_ = alpha;
|
||||
}
|
||||
|
||||
// Actualiza el valor de alpha
|
||||
void Background::updateAlphaColorTexture() {
|
||||
// Actualiza el valor de alpha (time-based)
|
||||
void Background::updateAlphaColorTexture(float delta_time) {
|
||||
// 1. Si ya hemos llegado al destino, no hacemos nada.
|
||||
if (alpha_color_texture_ == previous_alpha_color_texture_) {
|
||||
return;
|
||||
}
|
||||
alpha_color_texture_ > previous_alpha_color_texture_ ? ++previous_alpha_color_texture_ : --previous_alpha_color_texture_;
|
||||
SDL_SetTextureAlphaMod(color_texture_, previous_alpha_color_texture_);
|
||||
|
||||
// 2. Define la velocidad del cambio (p. ej., 150 unidades de alfa por segundo).
|
||||
// Puedes ajustar este valor para que la transición sea más rápida o lenta.
|
||||
constexpr float ALPHA_TRANSITION_SPEED = 150.0F;
|
||||
|
||||
// 3. Determina la dirección del cambio (subir o bajar el alfa)
|
||||
if (alpha_color_texture_ > previous_alpha_color_texture_) {
|
||||
// Aumentar el alfa
|
||||
current_alpha_float_ += ALPHA_TRANSITION_SPEED * delta_time;
|
||||
// Nos aseguramos de no pasarnos del objetivo
|
||||
current_alpha_float_ = std::min(current_alpha_float_, static_cast<float>(alpha_color_texture_));
|
||||
} else {
|
||||
// Disminuir el alfa
|
||||
current_alpha_float_ -= ALPHA_TRANSITION_SPEED * delta_time;
|
||||
// Nos aseguramos de no quedarnos cortos del objetivo
|
||||
current_alpha_float_ = std::max(current_alpha_float_, static_cast<float>(alpha_color_texture_));
|
||||
}
|
||||
|
||||
// 4. Actualiza el valor entero solo si ha cambiado lo suficiente
|
||||
// Usamos std::round para un redondeo más natural.
|
||||
const auto new_alpha = static_cast<size_t>(std::round(current_alpha_float_));
|
||||
|
||||
if (new_alpha != previous_alpha_color_texture_) {
|
||||
previous_alpha_color_texture_ = new_alpha;
|
||||
// SDL espera un Uint8 (0-255), así que hacemos un cast seguro.
|
||||
SDL_SetTextureAlphaMod(color_texture_, static_cast<Uint8>(previous_alpha_color_texture_));
|
||||
}
|
||||
}
|
||||
|
||||
// Precalcula el vector con el recorrido del sol
|
||||
|
||||
@@ -107,6 +107,7 @@ class Background {
|
||||
float progress_ = 0.0F; // Progresión interna
|
||||
float clouds_speed_ = 0; // Velocidad de las nubes
|
||||
float transition_ = 0; // Porcentaje de transición
|
||||
float current_alpha_float_ = 0.0F; // Acumulador para el valor alfa preciso
|
||||
size_t gradient_number_ = 0; // Índice de fondo degradado
|
||||
size_t alpha_color_texture_ = 0; // Transparencia de atenuación
|
||||
size_t previous_alpha_color_texture_ = 0; // Transparencia anterior
|
||||
@@ -132,7 +133,7 @@ class Background {
|
||||
void renderTopClouds(); // Dibuja las nubes superiores
|
||||
void renderBottomClouds(); // Dibuja las nubes inferiores
|
||||
void fillCanvas(); // Compone todos los elementos en la textura
|
||||
void updateAlphaColorTexture(); // Actualiza el alpha de la textura de atenuación
|
||||
void updateAlphaColorTexture(float delta_time); // Actualiza el alpha de la textura de atenuación
|
||||
void updateClouds(float delta_time); // Actualiza el movimiento de las nubes (time-based)
|
||||
void createSunPath(); // Precalcula el recorrido del sol
|
||||
void createMoonPath(); // Precalcula el recorrido de la luna
|
||||
|
||||
@@ -44,7 +44,7 @@ Director::Director(int argc, std::span<char*> argv) {
|
||||
Section::name = Section::Name::GAME;
|
||||
Section::options = Section::Options::GAME_PLAY_1P;
|
||||
#elif _DEBUG
|
||||
Section::name = Section::Name::CREDITS;
|
||||
Section::name = Section::Name::HI_SCORE_TABLE;
|
||||
Section::options = Section::Options::GAME_PLAY_1P;
|
||||
#else // NORMAL GAME
|
||||
Section::name = Section::Name::LOGO;
|
||||
|
||||
Reference in New Issue
Block a user