Мене турбує будь-який із запропонованих підходів, що вони зараз приводять до «блискучої» з мінливою швидкістю, що може не тільки відволікати гравців, але й складно оцінити, скільки часу залишилось об'єкта, перш ніж воно зникне . Замість цього, де - то в ваших параметрах (будь то глобальне для визуализатора або на основі кожного об'єкта) я б чотири константи: slowBlinkTime
, slowBlinkRate
, fastBlinkTime
і fastBlinkRate
. Під час візуалізації, якщо залишилося життя вашого об'єкта менше fastBlinkTime
, тоді мигніть його на fastBlinkRate
; в іншому випадку, якщо вона менше slowBlinkTime
, тоді митьте її на slowBlinkRate
. Якщо ви хочете піти на крок далі, ви могли б мати масив різних blinkTime
s іblinkRate
s та перевіряйте їх по черзі, але на практиці це, ймовірно, буде надмірним, а просто "попереджувальних" та "критичних" станів повинно бути достатньо. Код виглядатиме приблизно так:
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
}
Зауважте, що цей код передбачає цикл миготіння на половину увімкнення (саме те, що 0.5f
являє собою тест), але його можна легко налаштувати на щось на зразок двох третин, третина відключивши, лише налаштувавши відповідну константу. Це також не робить нічого, щоб «синхронізувати» миготіння між швидкими та повільними станами, але це досить просто для полірування.
Це потрібно легко підключити, і це матиме істотну перевагу IMHO в тому, що гравці зможуть побачити перехід від «повільного» до «швидкого» блимання і точно знати, скільки часу їм залишилося. Я б почав зі значень параметрів, таких як 5s для slowBlinkTime
і 0,5s для slowBlinkRate
, і 2s / 0,25s для fastBlinkTime
і fastBlinkRate
, але це, безумовно, залежить від вашої гри.