Mi preocupación con cualquiera de los enfoques que se ofrecen actualmente es que ambos conducirán a un parpadeo de 'velocidad variable', lo que no solo podría distraer a los jugadores sino que también dificultaría medir exactamente cuánto tiempo le queda a un objeto antes de que desaparezca . En su lugar, en algún lugar de sus parámetros (ya sea que ser global para el procesador o en una base por objeto) que tendría cuatro constantes: slowBlinkTime
, slowBlinkRate
, fastBlinkTime
y fastBlinkRate
. Al renderizar, si la vida restante de su objeto es inferior a fastBlinkTime
, parpadee fastBlinkRate
; de lo contrario, si es menor que slowBlinkTime
, entonces parpadee slowBlinkRate
. Si quisiera ir un paso más allá, podría tener una variedad de distintos blinkTime
syblinkRate
s y verifíquelos uno por uno, pero en la práctica es probable que sea excesivo y solo tener estados de 'advertencia' y 'críticos' debería ser suficiente. El código se vería así:
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
}
Tenga en cuenta que este código supone un ciclo de parpadeo medio encendido y medio apagado (eso es lo que 0.5f
representa en la prueba), pero podría modificarse fácilmente por algo así como dos tercios encendido, un tercio apagado simplemente ajustando la constante apropiada. Esto tampoco hace nada para 'sincronizar' el parpadeo entre los estados rápido y lento, pero eso es relativamente sencillo de pulir.
Esto debería ser sencillo de enchufar, y tendrá la ventaja sustancial de IMHO de que los jugadores podrán ver el cambio de parpadeo 'lento' a 'rápido' y saber exactamente cuánto tiempo les queda. Comenzaría con valores de parámetros como 5s para slowBlinkTime
y 0.5s para slowBlinkRate
y 2s / 0.25s para fastBlinkTime
y fastBlinkRate
, pero eso definitivamente depende de tu juego en particular.