Bonjour.

J'ai un bout de code sur lequel je me prends la tête depuis 2 jours déjà!

J'utilise SDL, mais c'est juste anecdotique ici.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
int dt = timer->get_ticks();
 
if (input->MouseButtonPressed[0] || input->AnyKeyIsPressed){
    ScreenTimer = 0;
}
if (ScreenTimer > 0){
    ScreenTimer -= 1 * dt;
}
else{
    SDL_Quit();//On ferme juste historie de mettre un bien voyant pour qu'on voit que ça marche
}
ScreenTimer est défini à 11000 (c-a-d 11 secondes).



La première ligne représente dt (qui varie entre 9 et 12).
La seconde ligne représente ScreenTimer qui commence à 11000 puis qui descend encore et encore jusqu'à arrivé à 0... Puis part en négatif... Et rien ne se passe !



Le pire c'est que si j'enleve le dt et que je laisse juste ScreenTimer -= 1; quand ScreenTimer arrivera à 0 le if fonctionnera bel et bien. Après quelques test il faut que ScreenTimer arrive pile poil sur 0 pour faire trigger le if...

Quand je presse une touche ou que je fais click gauche (premier if) ScreenTimer est bien défini sur 0 et le programme lance bien le SDL_Quit();

Totalement incompréhensible...

La classe du timer est bateau...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
void Timer::start(){
    startTicks = SDL_GetTicks();
}

void Timer::tick(){//appelé à chaque itération de la main loop
    startTicks = SDL_GetTicks();
}

int Timer::get_ticks(){
    return SDL_GetTicks() - startTicks;
}
Je commence à m'arracher les cheveux...