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, fastBlinkTimei 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 blinkTimes iblinkRatei 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.5freprezentuje 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 slowBlinkTimei 0,5s dla slowBlinkRatei 2s / 0,25s dlafastBlinkTime i fastBlinkRate, ale to zdecydowanie zależy od konkretnej gry.