Moje obawy związane z jednym z obecnie oferowanych podejść polegają na tym, że oba doprowadzą do migania „zmiennej prędkości”, co może nie tylko rozpraszać graczy, ale także utrudniać dokładne określenie, jak długo obiekt pozostawił, zanim zniknie . Zamiast tego, gdzieś w swoich parametrach (czy to globalny mechanizm renderujący lub na zasadzie per-obiektu) Chciałbym mieć cztery stałe: slowBlinkTime
, slowBlinkRate
, fastBlinkTime
i fastBlinkRate
. Podczas renderowania, jeśli pozostały czas życia Twojego obiektu jest krótszy niż fastBlinkTime
, mrugnij nim o fastBlinkRate
; w przeciwnym razie, jeśli jest mniejszy slowBlinkTime
, to mrugnij o slowBlinkRate
. Jeśli chcesz pójść o krok dalej, możesz mieć szereg różnych blinkTime
s iblinkRate
i sprawdzaj je jeden po drugim, ale w praktyce może to być przesada, a wystarczą same ostrzeżenia i stany krytyczne. Kod wyglądałby mniej więcej tak:
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
}
Zauważ, że ten kod zakłada pół-włączony, pół-wyłączony cykl mrugania (to 0.5f
reprezentuje test), ale może być łatwo dostosowany do czegoś w rodzaju 2/3 włączenia, 1/3 wyłączenia tylko przez dostosowanie odpowiedniej stałej. To również nie robi nic, aby „zsynchronizować” miganie między szybkim i wolnym stanem, ale jest to stosunkowo proste do polerowania.
Powinno to być łatwe do podłączenia, a będzie miało znaczącą przewagę IMHO, że gracze będą mogli zobaczyć przejście z „wolnego” na „szybkie” mruganie i dokładnie wiedzieć, jak długo im pozostało. Chciałbym zacząć od wartości parametrów takich jak 5s dla slowBlinkTime
i 0,5s dla slowBlinkRate
i 2s / 0,25s dlafastBlinkTime
i fastBlinkRate
, ale to zdecydowanie zależy od konkretnej gry.