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