Logo: convertit per a usar delta time
This commit is contained in:
@@ -42,7 +42,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::HI_SCORE_TABLE;
|
||||
Section::name = Section::Name::LOGO;
|
||||
Section::options = Section::Options::GAME_PLAY_1P;
|
||||
#else // NORMAL GAME
|
||||
Section::name = Section::Name::LOGO;
|
||||
|
||||
@@ -79,21 +79,23 @@ void Logo::checkInput() {
|
||||
}
|
||||
|
||||
// Gestiona el logo de JAILGAMES
|
||||
void Logo::updateJAILGAMES() {
|
||||
void Logo::updateJAILGAMES(float delta_time) {
|
||||
if (counter_ == 30) {
|
||||
Audio::get()->playSound("logo.wav");
|
||||
}
|
||||
|
||||
if (counter_ > 30) {
|
||||
const float pixels_to_move = SPEED * delta_time;
|
||||
|
||||
for (int i = 0; i < (int)jail_sprite_.size(); ++i) {
|
||||
if (jail_sprite_[i]->getX() != dest_.x) {
|
||||
if (i % 2 == 0) {
|
||||
jail_sprite_[i]->incX(-SPEED);
|
||||
jail_sprite_[i]->incX(-pixels_to_move);
|
||||
if (jail_sprite_[i]->getX() < dest_.x) {
|
||||
jail_sprite_[i]->setX(dest_.x);
|
||||
}
|
||||
} else {
|
||||
jail_sprite_[i]->incX(SPEED);
|
||||
jail_sprite_[i]->incX(pixels_to_move);
|
||||
if (jail_sprite_[i]->getX() > dest_.x) {
|
||||
jail_sprite_[i]->setX(dest_.x);
|
||||
}
|
||||
@@ -129,16 +131,21 @@ void Logo::updateTextureColors() {
|
||||
}
|
||||
|
||||
// Actualiza las variables
|
||||
void Logo::update() {
|
||||
if (SDL_GetTicks() - ticks_ > param.game.speed) {
|
||||
ticks_ = SDL_GetTicks(); // Actualiza el contador de ticks
|
||||
Screen::get()->update(); // Actualiza el objeto screen
|
||||
void Logo::update(float delta_time) {
|
||||
static float logic_accumulator = 0.0f;
|
||||
logic_accumulator += delta_time;
|
||||
|
||||
updateJAILGAMES(); // Actualiza el logo de JAILGAMES
|
||||
// Ejecutar lógica a 60 FPS (cada 16.67ms) para mantener consistencia en counter_ y colores
|
||||
constexpr float LOGIC_FRAME_TIME = 1000.0f / 60.0f;
|
||||
|
||||
if (logic_accumulator >= LOGIC_FRAME_TIME) {
|
||||
Screen::get()->update(); // Actualiza el objeto screen
|
||||
updateTextureColors(); // Actualiza los colores de las texturas
|
||||
++counter_; // Gestiona el contador
|
||||
logic_accumulator -= LOGIC_FRAME_TIME;
|
||||
}
|
||||
|
||||
updateJAILGAMES(delta_time); // Actualiza el logo de JAILGAMES con delta-time real
|
||||
Audio::update();
|
||||
}
|
||||
|
||||
@@ -154,11 +161,23 @@ void Logo::render() {
|
||||
SCREEN->render();
|
||||
}
|
||||
|
||||
// Calcula el tiempo transcurrido desde el último frame
|
||||
float Logo::calculateDeltaTime() {
|
||||
const Uint64 current_time = SDL_GetTicks();
|
||||
const float delta_time = static_cast<float>(current_time - last_time_);
|
||||
last_time_ = current_time;
|
||||
return delta_time;
|
||||
}
|
||||
|
||||
// Bucle para el logo del juego
|
||||
void Logo::run() {
|
||||
last_time_ = SDL_GetTicks();
|
||||
|
||||
while (Section::name == Section::Name::LOGO) {
|
||||
const float delta_time = calculateDeltaTime();
|
||||
|
||||
checkInput();
|
||||
update();
|
||||
update(delta_time);
|
||||
checkEvents(); // Tiene que ir antes del render
|
||||
render();
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class Logo {
|
||||
static constexpr int INIT_FADE_COUNTER_MARK = 300; // Tiempo del contador cuando inicia el fade a negro
|
||||
static constexpr int END_LOGO_COUNTER_MARK = 400; // Tiempo del contador para terminar el logo
|
||||
static constexpr int POST_LOGO_DURATION = 20; // Tiempo que dura el logo con el fade al máximo
|
||||
static constexpr int SPEED = 8; // Velocidad de desplazamiento de cada línea
|
||||
static constexpr float SPEED = 8.0f / 15.0f; // Velocidad de desplazamiento de cada línea (píxeles por ms)
|
||||
|
||||
// --- Objetos y punteros ---
|
||||
std::shared_ptr<Texture> since_texture_; // Textura con los gráficos "Since 1998"
|
||||
@@ -42,15 +42,16 @@ class Logo {
|
||||
// --- Variables ---
|
||||
std::vector<Color> color_; // Vector con los colores para el fade
|
||||
int counter_ = 0; // Contador
|
||||
Uint64 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa
|
||||
Uint64 last_time_ = 0; // Último timestamp para calcular delta-time
|
||||
SDL_FPoint dest_; // Posición donde dibujar el logo
|
||||
|
||||
// --- Métodos internos ---
|
||||
void update(); // Actualiza las variables
|
||||
void update(float delta_time); // Actualiza las variables
|
||||
void render(); // Dibuja en pantalla
|
||||
static void checkEvents(); // Comprueba el manejador de eventos
|
||||
static void checkInput(); // Comprueba las entradas
|
||||
void updateJAILGAMES(); // Gestiona el logo de JAILGAMES
|
||||
void updateJAILGAMES(float delta_time); // Gestiona el logo de JAILGAMES
|
||||
void renderJAILGAMES(); // Renderiza el logo de JAILGAMES
|
||||
void updateTextureColors(); // Gestiona el color de las texturas
|
||||
float calculateDeltaTime(); // Calcula el tiempo transcurrido desde el último frame
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user