Compte à rebours iphone sdk?
Question
J'ai un compte à rebours dans mon jeu et je suis en train de comprendre comment faire en sorte que cela montre deux décimales et enregistrements avec 2 décimales dans ma table. En ce moment, il compte à rebours comme un nombre entier et enregistre un nombre entier. Toutes les idées?
-(void)updateTimerLabel{
if(appDelegate.gameStateRunning == YES){
if(gameVarLevel==1){
timeSeconds = 100;
AllowResetTimer = NO;
}
timeSeconds--;
timerLabel.text=[NSString stringWithFormat:@"Time: %d", timeSeconds];
}
countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTimerLabel) userInfo:nil repeats:YES];
La solution
Pour avoir des mises à jour de sous-secondes, l'intervalle de la minuterie doit être <1. Mais la précision de NSTimer est à seulement 50 ms, donc scheduledTimerWithTimeInterval:0.01
ne fonctionnera pas.
En outre, la minuterie peut être retardée par diverses activités, donc l'utilisation timeSeconds
entraînera une erreur de chronométrage. La manière habituelle est de comparer le NSDate maintenant avec la date à laquelle la minuterie commence. Cependant, ce code est un jeu, l'approche actuelle peut causer moins de frustration pour les joueurs esp. si les processus de programme ou de fond beaucoup de ressources.
La première chose à faire est de convertir le countdownTimer à intervalle sous-secondes.
countdownTimer = [NSTimer scheduledTimerWithTimeInterval:0.67 target:self selector:@selector(updateTimerLabel) userInfo:nil repeats:YES];
Alors, ne comptez pas sur le temps en secondes, mais centiseconds:
if(appDelegate.gameStateRunning == YES){
if(gameVarLevel==1){
timeCentiseconds = 10000;
AllowResetTimer = NO;
}
}
timeCentiseconds -= 67;
Finalement, diviser par 100 à la sortie:
timerLabel.text=[NSString stringWithFormat:@"Time: %d.%02d", timeCentiseconds/100, timeCentiseconds%100];
Vous pouvez également utiliser un double
:
double timeSeconds;
...
if(appDelegate.gameStateRunning == YES){
if(gameVarLevel==1){
timeSeconds = 100;
AllowResetTimer = NO;
}
}
timeSeconds -= 0.67;
timerLabel.text=[NSString stringWithFormat:@"Time: %.2g", timeSeconds];