Minha preocupação com qualquer uma das abordagens atualmente oferecidas é que ambas levem a piscar com 'velocidade variável', o que pode não apenas distrair os jogadores, mas também dificulta a medição exata de quanto tempo um objeto resta antes de desaparecer . Em vez disso, em algum lugar em seus parâmetros (sejam eles global para o renderizador ou em uma base per-objeto) eu teria quatro constantes: slowBlinkTime
, slowBlinkRate
, fastBlinkTime
e fastBlinkRate
. Ao renderizar, se a vida restante do seu objeto for menor que fastBlinkTime
, pisque-o em fastBlinkRate
; caso contrário, se for menor que slowBlinkTime
, então pisque slowBlinkRate
. Se você quiser ir um passo mais longe, então você pode ter uma variedade de diferentes blinkTime
s eblinkRate
e verifique-os um por um, mas, na prática, é provável que exagere e apenas ter estados de 'aviso' e 'crítico' deve ser suficiente. O código ficaria assim:
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
}
Observe que esse código pressupõe um ciclo intermitente de meia-meia-meia-meia (é o que o 0.5f
teste representa), mas pode ser facilmente ajustado para algo como dois terços ligados, um terço desligado apenas ajustando a constante apropriada. Isso também não faz nada para 'sincronizar' o piscar entre os estados rápido e lento, mas é relativamente simples de polir.
Isso deve ser fácil de conectar, e terá a vantagem substancial do IMHO de que os jogadores possam ver a mudança de 'lento' para 'rápido' piscando e saber exatamente quanto tempo resta. Eu começaria com valores de parâmetros como 5s para slowBlinkTime
e 0,5s para slowBlinkRate
e 2s / 0,25s para fastBlinkTime
e fastBlinkRate
, mas isso definitivamente depende do seu jogo em particular.