Меня беспокоит любой из предлагаемых в настоящее время подходов: они оба приведут к миганию с переменной скоростью, что не только отвлекает игроков, но и затрудняет точную оценку того, как долго объект оставался до исчезновения. , Вместо этого, где - то в ваших параметрах (будь то глобальное для визуализатора или на основе каждого объекта) я бы четыре константы: slowBlinkTime, slowBlinkRate, fastBlinkTimeи fastBlinkRate. При рендеринге, если оставшаяся жизнь вашего объекта меньше, чем fastBlinkTime, мигайте fastBlinkRate; в противном случае, если оно меньше slowBlinkTime, тогда моргните slowBlinkRate. Если вы хотите , чтобы дальше идти на шаг , то вы могли бы иметь множество различных blinkTimeс иblinkRates и проверяйте их один за другим, но на практике это может быть излишним, и достаточно просто иметь «предупреждение» и «критические» состояния. Код будет выглядеть примерно так:
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в тесте), но его можно легко настроить, например, на две трети, на одну треть, просто изменив соответствующую константу. Это также ничего не делает для «синхронизации» мигания между быстрым и медленным состояниями, но это относительно просто для полировки.
Это должно быть просто для подключения, и это будет иметь ИМХО существенное преимущество в том, что игроки смогут увидеть переход от «медленного» к «быстрому» миганию и точно знать, сколько времени у них осталось. Я бы начал со значений параметров, таких как 5 с slowBlinkTimeи 0,5 с slowBlinkRate, и 2 с / 0,25 с fastBlinkTimeи fastBlinkRate, но это определенно зависит от вашей конкретной игры.