Динамическая полоска хп с "анимацией"

Версия Minecraft
1.7.10
API
Forge
Доброго времени суток. Я хочу на данный момент реализовать полосу здоровья персонажа (хп) с плавным убыванием от 100% к n%.

У меня готова полоска без этого так званого "плавного убывания", т.е. отбирается всё резко. Как мне это правильно реализовать и какой аспект мне для этого нужно учить? Заранее благодарю за ответы.
 
Решение
@Rebel Penguin - далее более понятное объяснение для новичков, по сути ты прав
@hohserg1 тоже верно было бы, но это не то немного, ему же анимация нужна
@BestFoxy че...

Поэтому берем всю суть процесса и раскидываем по пунктам раз не понятно
К примеру было 20 хп, стало 10хп, нужно что-бы оно стало на худе через некоторое время 10-кой и плавно
1. включаем мозги и думаем как делается правильно это
2. понимаем что нам нужно что-то вроде таймера или типо того
3. Делаем временную переменную к примеру public double hpProgress, назначать его надо до того как у тебя хп отнялись, т.е. 20 должно быть если доставать с игрока.
4. делаем проверку аля ниже в тик-хандлере/тик-эвенте/где угодно хоть в отдельном потоке главное...
7,099
324
1,509
  • Like
Реакции: jopi
929
30
66
Java:
float value = 25;//Текущее значение
float valueMax = 100f;//Максимальное значение
float progressMax = 150F;//Максимальный прогресс
float progress = (value * progressMax) / valueMax;
Правильно подставь свои значения и всё будет красиво.
 
  • Angry
Реакции: jopi

jopi

Попрошайка
1,421
30
260
@Rebel Penguin - далее более понятное объяснение для новичков, по сути ты прав
@hohserg1 тоже верно было бы, но это не то немного, ему же анимация нужна
@BestFoxy че...

Поэтому берем всю суть процесса и раскидываем по пунктам раз не понятно
К примеру было 20 хп, стало 10хп, нужно что-бы оно стало на худе через некоторое время 10-кой и плавно
1. включаем мозги и думаем как делается правильно это
2. понимаем что нам нужно что-то вроде таймера или типо того
3. Делаем временную переменную к примеру public double hpProgress, назначать его надо до того как у тебя хп отнялись, т.е. 20 должно быть если доставать с игрока.
4. делаем проверку аля ниже в тик-хандлере/тик-эвенте/где угодно хоть в отдельном потоке главное что-бы обновлялось
Java:
public double hpProgress = 20.0D; //То что мы делали раньше,
//тут лучше доставать и назначать через игрока

//далее должен быть обновляемый метод(НЕ myAnimationMethod, потому-что понимай
//что это пример, а если ты всунешь в игру это как есть у тебя НИЧЕГО НЕ ЗАРАБОТАЕТ)
void myAnimationMethod() {
    int nowHP = 10.0D; //ХП игрока сейчас, назначать через реальные значения, не как тут
    if ((int)hpProgress != nowHP) { //Проверка дабы не циклировать этот код всё время
        if (hpProgress > nowHP) {
            double var = hpProgress - nowHP; //получили разницу, знаем куда двигаться
            hpProgress -= var / X; //Здесь мы уменьшаем var в несколько раз что-бы оно
            //уменьшалось кусочками, а не сразу. X - Подбирайте вручную, я бы сделал может 5
        } else if (hpProgress < nowHP) {
            //теперь то-же самое только будем увеличивать хп
            double var = nowHP - hpProgress;
            hpProgress += var / X;
        } else {
            //И здесь мы будем просто устанавливать значение на nowHP если разница
            //доли пикселя(на всякий)
            hpProgress = nowHP;
        }
    }
}
5. Подкидываем под текстуру(отображение)
6. наслаждаемся тем что вы гений и вы стали умнее
 

Icosider

Kotliner
Администратор
3,600
99
663
Люди до того как придумали clamp:
Java:
public double hpProgress = 20.0D; //То что мы делали раньше,
//тут лучше доставать и назначать через игрока

//далее должен быть обновляемый метод(НЕ myAnimationMethod, потому-что понимай
//что это пример, а если ты всунешь в игру это как есть у тебя НИЧЕГО НЕ ЗАРАБОТАЕТ)
void myAnimationMethod() {
    int nowHP = 10.0D; //ХП игрока сейчас, назначать через реальные значения, не как тут
    if ((int)hpProgress != nowHP) { //Проверка дабы не циклировать этот код всё время
        if (hpProgress > nowHP) {
            double var = hpProgress - nowHP; //получили разницу, знаем куда двигаться
            hpProgress -= var / X; //Здесь мы уменьшаем var в несколько раз что-бы оно
            //уменьшалось кусочками, а не сразу. X - Подбирайте вручную, я бы сделал может 5
        } else if (hpProgress < nowHP) {
            //теперь то-же самое только будем увеличивать хп
            double var = nowHP - hpProgress;
            hpProgress += var / X;
        } else {
            //И здесь мы будем просто устанавливать значение на nowHP если разница
            //доли пикселя(на всякий)
            hpProgress = nowHP;
        }
    }
}
5. Подкидываем под текстуру(отображение)
6. наслаждаемся тем что вы гений и вы стали умнее
 
  • Like
Реакции: jopi
Сверху