C++ Краш меню при анимации

Рисую демонической кровью
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции
46
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Здрасте форумчане, поймал анимации на чекбоксе

imgui_widgets.cpp:
Expand Collapse Copy
struct checkbox_element {
    float selected_rect;
};

bool ImGui::Checkbox(const char* label, bool* v)
{
    ImGuiWindow* window = GetCurrentWindow();
    if (window->SkipItems)
        return false;

    ImGuiContext& g = *GImGui;
    const ImGuiStyle& style = g.Style;
    const ImGuiID id = window->GetID(label);
    const ImVec2 label_size = CalcTextSize(label, NULL, true);

    const float square_sz = 16;
    const ImVec2 pos = window->DC.CursorPos;
    const ImRect total_bb(pos, pos + ImVec2(square_sz + 12 + label_size.x, (label_size.y > square_sz) ? label_size.y : square_sz));
    ItemSize(total_bb, style.FramePadding.y);
    if (!ItemAdd(total_bb, id))
        return false;

    bool hovered, held;
    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
    if (pressed)
    {
        *v = !(*v);
        MarkItemEdited(id);
    }

    static std::map <ImGuiID, checkbox_element> anim;
    auto it_anim = anim.find(id);
    if (it_anim == anim.end())
    {
        anim.insert({ id, { 0.0f } });
        it_anim = anim.find(id);
    }

    it_anim->second.selected_rect = ImLerp(it_anim->second.selected_rect, *v ? 1.0f : (hovered ? 0.2f : 0.0f), 0.08f * (1.0f - ImGui::GetIO().DeltaTime));

    window->DrawList->AddRectFilled(total_bb.Min, total_bb.Min + ImVec2(square_sz, square_sz), ImColor(32, 33, 35), 3.0f);
    window->DrawList->AddRectFilled(total_bb.Min, total_bb.Min + ImVec2(square_sz, square_sz), ImColor(22 / 255.0f, 118 / 255.0f, 243 / 255.0f, it_anim->second.selected_rect), 3.0f);
    RenderCheckMark(window->DrawList, ImVec2(total_bb.Min.x + 4, (total_bb.Min.y + total_bb.Max.y) / 2 - 4), ImColor(1.0f, 1.0f, 1.0f, it_anim->second.selected_rect), 9.0f);

    window->DrawList->AddText(ImVec2(total_bb.Max.x - label_size.x - 5, total_bb.Min.y), ImGui::GetColorU32(ImGuiCol_Text), label);

    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
    return pressed;

(анимация с 31 строки)

Суть проблемы:При нажатии на "insert"(open menu) -> игра крашится(немного поясню - крашится без каких либо окон ошибок и т. п., т.е. игра просто закрывается)
Как я определил что краш зависит от анимаций? -> методом вырезки кода я понял, что если вырезать анимацию, то меню и чекбокс рендерится нормально
из этого получаем, что проблема скорее всего в анимации(так как с инициализацией, вызовами и т.д всё нормально).

Кто поможети обьяснит буду благодарен и можете рассчитывать на денежное вознагрождение.

Заранее спасибо.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Отладчик повесь и будешь знать более подробно что крашит, а не «скорее всего»
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Здрасте форумчане, поймал анимации на чекбоксе

imgui_widgets.cpp:
Expand Collapse Copy
struct checkbox_element {
    float selected_rect;
};

bool ImGui::Checkbox(const char* label, bool* v)
{
    ImGuiWindow* window = GetCurrentWindow();
    if (window->SkipItems)
        return false;

    ImGuiContext& g = *GImGui;
    const ImGuiStyle& style = g.Style;
    const ImGuiID id = window->GetID(label);
    const ImVec2 label_size = CalcTextSize(label, NULL, true);

    const float square_sz = 16;
    const ImVec2 pos = window->DC.CursorPos;
    const ImRect total_bb(pos, pos + ImVec2(square_sz + 12 + label_size.x, (label_size.y > square_sz) ? label_size.y : square_sz));
    ItemSize(total_bb, style.FramePadding.y);
    if (!ItemAdd(total_bb, id))
        return false;

    bool hovered, held;
    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
    if (pressed)
    {
        *v = !(*v);
        MarkItemEdited(id);
    }

    static std::map <ImGuiID, checkbox_element> anim;
    auto it_anim = anim.find(id);
    if (it_anim == anim.end())
    {
        anim.insert({ id, { 0.0f } });
        it_anim = anim.find(id);
    }

    it_anim->second.selected_rect = ImLerp(it_anim->second.selected_rect, *v ? 1.0f : (hovered ? 0.2f : 0.0f), 0.08f * (1.0f - ImGui::GetIO().DeltaTime));

    window->DrawList->AddRectFilled(total_bb.Min, total_bb.Min + ImVec2(square_sz, square_sz), ImColor(32, 33, 35), 3.0f);
    window->DrawList->AddRectFilled(total_bb.Min, total_bb.Min + ImVec2(square_sz, square_sz), ImColor(22 / 255.0f, 118 / 255.0f, 243 / 255.0f, it_anim->second.selected_rect), 3.0f);
    RenderCheckMark(window->DrawList, ImVec2(total_bb.Min.x + 4, (total_bb.Min.y + total_bb.Max.y) / 2 - 4), ImColor(1.0f, 1.0f, 1.0f, it_anim->second.selected_rect), 9.0f);

    window->DrawList->AddText(ImVec2(total_bb.Max.x - label_size.x - 5, total_bb.Min.y), ImGui::GetColorU32(ImGuiCol_Text), label);

    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
    return pressed;

(анимация с 31 строки)

Суть проблемы:При нажатии на "insert"(open menu) -> игра крашится(немного поясню - крашится без каких либо окон ошибок и т. п., т.е. игра просто закрывается)
Как я определил что краш зависит от анимаций? -> методом вырезки кода я понял, что если вырезать анимацию, то меню и чекбокс рендерится нормально
из этого получаем, что проблема скорее всего в анимации(так как с инициализацией, вызовами и т.д всё нормально).

Кто поможети обьяснит буду благодарен и можете рассчитывать на денежное вознагрождение.

Заранее спасибо.
была вроде такая проблема я переделал с map на vector
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Он не мог не увидеть проблем если есть краш
1669203893797.png

После insert вот это и всё ,_,
1669203893797.png

После краша вот это и всё ,_,
1669204048611.png


В выводе тоже нету, мб у меня не настроен дебаг, но я всё что надо включил
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Где этот флаг указать надо?
Мой совет - ничего на плюсах не делай, по крайней мере пока что, изучи плюсы более подробно, пореверсь игру и хотя бы научись пользоваться стимом и гуглом.
На всякий:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Посмотреть вложение 228946
После insert вот это и всё ,_,

Посмотреть вложение 228947

В выводе тоже нету, мб у меня не настроен дебаг, но я всё что надо включил
во первых
Свойства проекта -> Компоновщик -> Отладка -> Создавать отладочную информацию ставишь на /DEBUG
Во вторых инжектишь методом LLA, но не MMAP
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Мой совет - ничего на плюсах не делай, по крайней мере пока что, изучи плюсы более подробно, пореверсь игру и хотя бы научись пользоваться стимом и гуглом.
На всякий:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Сижу в ахуе, всё работает, это всё оказывается из-за инжектора ,_,
Типо рил, заинжектил другим инжектором и чекбокс рендерится ,_,
Мой совет - ничего на плюсах не делай, по крайней мере пока что, изучи плюсы более подробно, пореверсь игру и хотя бы научись пользоваться стимом и гуглом.
На всякий:
Пожалуйста, авторизуйтесь для просмотра ссылки.
На счет этого - я изучаю плюсы где-то +- 4 месяца(и до этого был опыт на других языках), далее про гугл, первым делом я пошел искать инфу в инете, но на опен сайтах врятли вы найдёте решение такой проблемы(а она была именно в инжекторе, который не хотел рендерить чекбокс, скорее всего из-за импортов)
Ну и всем спасибо большое кто хотел помочь), тему считаю закрытой.
 
Последнее редактирование:
Назад
Сверху Снизу