Вопрос Цикл в ImGui

Начинающий
Статус
Оффлайн
Регистрация
9 Авг 2023
Сообщения
7
Реакции[?]
0
Поинты[?]
0
Как использовать цикл в ImGui? При попытке использовать цикл, ксго зависает и вылетает.
Пример:
C++:
ImGui::CheckBox("Testing", &test);
if(test){
    while(true){
        //что то
    }
}
 
Участник
Статус
Оффлайн
Регистрация
15 Янв 2021
Сообщения
492
Реакции[?]
289
Поинты[?]
79K
Как использовать цикл в ImGui? При попытке использовать цикл, ксго зависает и вылетает.
Пример:
C++:
ImGui::CheckBox("Testing", &test);
if(test){
    while(true){
        //что то
    }
}
Тебе ведь уже объяснили, что у тебя там бесконечный цикл из while(true). Для лучшшего понимания логики, как и большинство коллег по цеху помощи в даном разделе, я бы рекомендовал подучить основу и базу, но кмон, ты не будешь этого делать скорее всего :) Для лучше понимания, объясним лучше причину вылета, всё твои великие приколюшки-менюшки-плюшки рисуются в одном из хуков функции DirectX9 девайса, который вызывается каждый кадр. Если ты в этой функции поставишь бесконечный цикл, то кадр даже не отрисуется, а тупо зависнет, от того и виснет твоя игра. Чтобы тебе помогли разобраться, распиши зачем тебе нужен цикл прям в меню и почему бы просто не засунуть твою переменную test в конфиг, получив что-то из разряда ImGui::Checkbox("Test", &g_Config.test_bool); и проверять эту test_bol уже в другом хуке.
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как использовать цикл в ImGui? При попытке использовать цикл, ксго зависает и вылетает.
Пример:
C++:
ImGui::CheckBox("Testing", &test);
if(test){
    while(true){
        //что то
    }
}
я не до конца уверен в своих словах, но, насколько я знаю, это верное объяснение

рендер твоего меню работает так:

while(true)
{
рендер 1
рендер 2
рендер 3
и тд
}

когда ты внутри основного (рендер) цикла используешь другой, получается что-то такое -

while(true)
{
while(true)
{
dosmth()
}
}

мы попадаем в первую итерацию рендер цикла, далее попадаем в первую итерацию нашего цикла и застряваем:)
будет только одна итерация рендер цикла, следовательно, только один рендер, следовательно, все летит в жопу
у тебя уже есть бесконечный цикл, тебе надо сделать только проверку if() и дальше использовать свою функцию.
основной цикл уже подразумевает, что действие будет повторяться все время
mhalaider прав, тебе пока рано делать что-то, не понимая как это что-то работает
 
Последнее редактирование:
Сверху Снизу