Вопрос Как можно сделать бегующую строку как в лоадере рифка?

Пользователь
Статус
Оффлайн
Регистрация
20 Янв 2022
Сообщения
182
Реакции[?]
40
Поинты[?]
25K
вот что у меня получилось: 242DC0B9-B36B-4026-A942-BA7E1986379E.jpeg
хочу сделать анимированную бегующую строку как в оригинале, не подскажите как сделать?
 
kitty.
Пользователь
Статус
Оффлайн
Регистрация
17 Окт 2021
Сообщения
283
Реакции[?]
111
Поинты[?]
17K
вот что у меня получилось: Посмотреть вложение 255371
хочу сделать анимированную бегующую строку как в оригинале, не подскажите как сделать?
если бегущая строка это постепенное появление символов по одному, то просто каждое n-ое время(в моём примере кода это timer > 5, значение 5 ты можешь меня на любое нужное тебе, от него будет зависеть скорость появления последующего символа, разжевал как мог) добавляй по одной букве в свою строку...

вот ( код конечно костыльный, написал на скорую руку, особо не думая, но мне похуй как-то. ):

C++:
    std::string needed_text = "gaysisnothumans";

    static auto prev_i = 0;
    static auto timer = 0;

    static std::string our_text = "";
    if ( timer++ > 5 && our_text.compare( needed_text ) ) {
        for ( auto i = prev_i; i < needed_text.length( ); i++ ) {
            our_text.push_back( needed_text.at( i ) );

            prev_i = i + 1;

            break;
        }

        timer = 0;
    }

    text( our_text, pos );
если же просто строку нужно целиком передвигать типа она едет вправо или влево,
то используй интерполяцию/экстраполяцию(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)..
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
20 Янв 2022
Сообщения
182
Реакции[?]
40
Поинты[?]
25K
если бегущая строка это постепенное появление символов по одному, то просто каждое n-ое время(в моём примере кода это timer > 5, значение 5 ты можешь меня на любое нужное тебе, от него будет зависеть скорость появления последующего символа, разжевал как мог) добавляй по одной букве в свою строку...

вот ( код конечно костыльный, написал на скорую руку, особо не думая, но мне похуй как-то. ):

C++:
    std::string needed_text = "gaysisnothumans";

    static auto prev_i = 0;
    static auto timer = 0;

    static std::string our_text = "";
    if ( timer++ > 5 && our_text.compare( needed_text ) ) {
        for ( auto i = prev_i; i < needed_text.length( ); i++ ) {
            our_text.push_back( needed_text.at( i ) );

            prev_i = i + 1;

            break;
        }

        timer = 0;
    }

    text( our_text, pos );
если же просто строку нужно целиком передвигать типа она едет вправо или влево,
то используй интерполяцию/экстраполяцию(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)..
я имел ввиду как загрузку в винде полосочкой, типо квадратик перемещался влево вправо бесконечно, но спасибо за помощь
 
kitty.
Пользователь
Статус
Оффлайн
Регистрация
17 Окт 2021
Сообщения
283
Реакции[?]
111
Поинты[?]
17K
я имел ввиду как загрузку в винде полосочкой, типо квадратик перемещался влево вправо бесконечно, но спасибо за помощь
я бы тебе щас помог, примерно понял о чём ты, но у меня времени уже нет, сорян
нужно целиком передвигать типа она едет вправо или влево,
то используй интерполяцию/экстраполяцию(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)..
но а также я ответил отчасти на твой вопрос( также на imgui есть много реализаций разных, поищи)

pos_1 = это изначальная позиция
pos_2 = конечная позиция

step = это определенный шаг, который сделает позиция за один тик, пока мы идем от pos_1 к pos_2 нам нужно этот step увеличивать, то есть делать следующий шаг

Код:
if ( to_start )
    for ( auto step = 0.f; step < 1.f; step += 0.01f )
        lerp_pos = lerp(pos_1, pos_2, step)

else if ( to_end )
    for ( auto step = 1.f; step > 0.f; step -= 0.01f )
        lerp_pos = lerp(pos_2, pos_1, step)
самый простой пример, написал уже на телефоне(появилось немного времени), если ты не прям чайник, то поймешь как это переделать под себя

p.s скорее всего ты про progress bar я так понял, но суть в принципе та же
 
Последнее редактирование:
Сверху Снизу