Ma préoccupation avec l'une ou l'autre des approches actuellement proposées est qu'elles conduiront toutes deux à un clignotement à vitesse variable, ce qui pourrait non seulement distraire les joueurs, mais aussi rendre difficile la mesure exacte du temps qu'il reste à un objet avant qu'il ne disparaisse. . Au lieu de cela, quelque part dans vos paramètres (que ce soit mondial pour l'équarrissage ou sur une base par objet) j'aurais quatre constantes: slowBlinkTime
, slowBlinkRate
, fastBlinkTime
et fastBlinkRate
. Lors du rendu, si la durée de vie restante de votre objet est inférieure à fastBlinkTime
, faites-le clignoter fastBlinkRate
; sinon, si c'est moins que slowBlinkTime
, alors clignote slowBlinkRate
. Si vous vouliez aller plus loin, vous pourriez avoir un tableau de blinkTime
s etblinkRate
s et vérifiez-les un par un, mais dans la pratique, cela risque d'être excessif et le simple fait d'avoir des états «d'avertissement» et «critiques» devrait suffire. Le code ressemblerait à ceci:
float blinkCycle;
if ( entity.timeLeft < fastBlinkTime ) {
blinkCycle = entity.timeLeft/fastBlinkRate;
} else if ( entity.timeLeft < slowBlinkTime ) {
blinkCycle = entity.timeLeft/slowBlinkRate;
}
blinkCycle = blinkCycle - floor(blinkCycle); // find blinkCycle 'mod 1'
if ( (entity.timeLeft < slowBlinkTime) && (blinkCycle < 0.5f) ) {
renderBlinked(entity); // this should be the 'blinked' state, whether flashed or missing
} else {
renderNormal(entity); // the normal render for the entity
}
Notez que ce code présume un cycle de clignotement à moitié allumé et à moitié éteint (c'est ce que 0.5f
représente le test), mais pourrait facilement être modifié pour quelque chose comme les deux tiers, un tiers désactivé juste en ajustant la constante appropriée. Cela ne fait rien non plus pour «synchroniser» le clignotement entre les états rapide et lent, mais c'est relativement simple à polir.
Cela devrait être simple à brancher, et cela aura l'avantage substantiel à mon humble avis que les joueurs pourront voir le passage du clignotement «lent» au «rapide» et savoir exactement combien de temps il leur reste. Je commencerais par des valeurs de paramètres comme 5 s pour slowBlinkTime
et 0,5 s pour slowBlinkRate
et 2 s / 0,25 s pour fastBlinkTime
et fastBlinkRate
, mais cela dépend certainement de votre jeu particulier.