-
Автор темы
- #1
Вопрос в заголовкe
Вопрос в заголовкe
#include "imgui_internal.h"
void ToggleButton(const char* str_id, bool* v)
{
ImVec2 p = ImGui::GetCursorScreenPos();
ImDrawList* draw_list = ImGui::GetWindowDrawList();
float height = ImGui::GetFrameHeight();
float width = height * 1.55f;
float radius = height * 0.50f;
ImGui::InvisibleButton(str_id, ImVec2(width, height));
if (ImGui::IsItemClicked())
*v = !*v;
float t = *v ? 1.0f : 0.0f;
ImGuiContext& g = *GImGui;
float ANIM_SPEED = 0.08f;
if (g.LastActiveId == g.CurrentWindow->GetID(str_id))// && g.LastActiveIdTimer < ANIM_SPEED)
{
float t_anim = ImSaturate(g.LastActiveIdTimer / ANIM_SPEED);
t = *v ? (t_anim) : (1.0f - t_anim);
}
ImU32 col_bg;
if (ImGui::IsItemHovered())
col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.78f, 0.78f, 0.78f, 1.0f), ImVec4(0.64f, 0.83f, 0.34f, 1.0f), t));
else
col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.85f, 0.85f, 0.85f, 1.0f), ImVec4(0.56f, 0.83f, 0.26f, 1.0f), t));
draw_list->AddRectFilled(p, ImVec2(p.x + width, p.y + height), col_bg, height * 0.5f);
draw_list->AddCircleFilled(ImVec2(p.x + radius + t * (width - radius * 2.0f), p.y + radius), radius - 1.5f, IM_COL32(255, 255, 255, 255));
}
Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам beginпо такому же принципу сделай на if (Menu::Render)Код:#include "imgui_internal.h" void ToggleButton(const char* str_id, bool* v) { ImVec2 p = ImGui::GetCursorScreenPos(); ImDrawList* draw_list = ImGui::GetWindowDrawList(); float height = ImGui::GetFrameHeight(); float width = height * 1.55f; float radius = height * 0.50f; ImGui::InvisibleButton(str_id, ImVec2(width, height)); if (ImGui::IsItemClicked()) *v = !*v; float t = *v ? 1.0f : 0.0f; ImGuiContext& g = *GImGui; float ANIM_SPEED = 0.08f; if (g.LastActiveId == g.CurrentWindow->GetID(str_id))// && g.LastActiveIdTimer < ANIM_SPEED) { float t_anim = ImSaturate(g.LastActiveIdTimer / ANIM_SPEED); t = *v ? (t_anim) : (1.0f - t_anim); } ImU32 col_bg; if (ImGui::IsItemHovered()) col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.78f, 0.78f, 0.78f, 1.0f), ImVec4(0.64f, 0.83f, 0.34f, 1.0f), t)); else col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.85f, 0.85f, 0.85f, 1.0f), ImVec4(0.56f, 0.83f, 0.26f, 1.0f), t)); draw_list->AddRectFilled(p, ImVec2(p.x + width, p.y + height), col_bg, height * 0.5f); draw_list->AddCircleFilled(ImVec2(p.x + radius + t * (width - radius * 2.0f), p.y + radius), radius - 1.5f, IM_COL32(255, 255, 255, 255)); }
Объективно код анимации тут нормальный, и вполне можно заюзать для бегина, а вот то что отправил ты - можно сделать намного лучшеЧто за бред блять, зачем ты скинул говно анимацию
ну так сделайможно сделать намного лучше
Че то не воркает, я вроде все правильно сделалstatic float alpha = 0.0f;
if (alpha < 1.f)
alpha += 0.2f;
else if (alpha > 0.f)
alpha -= 0.2f;
ImGui::PushStyleVar(ImGui_StyleVarAlpha,alpha);
// render menu
ImGui::PopStyleVar();
Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам begin
static float alpha = std::clamp(alpha + ImGui::GetIO().DeltaTime * 2.f * (_visible ? 1.f : -1.f), 0.f, 1.f);Че то не воркает, я вроде все правильно сделалПосмотреть вложение 199757
Меню открыто, и теперь не закрываетсяstatic float alpha = std::clamp(alpha + ImGui::GetIO().DeltaTime * 2.f * (_visible ? 1.f : -1.f), 0.f, 1.f);
и удали
Посмотреть вложение 199758
тот код что я написал выше неправильный, я там чек забыл
Вылетает
ну так покажи дебаг, он покажет в чем проблемаВылетает
netПосмотреть вложение 199760 после этого ImGui::PopStyleVar?
Блять, я вроде все правильно делаю но или крашит или меню не закрывается
Хоть помогите с затемнением заднего фона менюБлять, я вроде все правильно делаю но или крашит или меню не закрывается
ну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно бытьБлять, я вроде все правильно делаю но или крашит или меню не закрывается
Хоть помогите с затемнением заднего фона меню
передну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно быть
ну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно быть
перед
}
ImGui::EndChild() вставь и все
ДО ImgUI::End нужно уже ресетнуть все стайл вары.
Просто добавлять или отнимать числа плохая идея ибо скорость будет зависеть от фпс, если 400 то очень быстро если 10 то очень медленно.static float alpha = 0.0f;
if (alpha < 1.f)
alpha += 0.2f;
else if (alpha > 0.f)
alpha -= 0.2f;
ImGui::PushStyleVar(ImGui_StyleVarAlpha,alpha);
// render menu
ImGui::PopStyleVar();
Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам begin
Это уже лучше, но если хочешь удалять чек на закрытое меню то хотя бы сделайте проверку по типу if ( alpha <= 0) return;static float alpha = std::clamp(alpha + ImGui::GetIO().DeltaTime * 2.f * (_visible ? 1.f : -1.f), 0.f, 1.f);
и удали
Посмотреть вложение 199758
тот код что я написал выше неправильный, я там чек забыл
if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha > 0.f) {
float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha - fc / 255.f, 0.f, 1.f);
}
if (m_bIsMenuOpened && ImGui::GetStyle().Alpha < 1.f) {
float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha + fc / 255.f, 0.f, 1.f);
}
if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha <= 0.f)
return;
ого, теперь ты изменяешь весь стайл имгуи, ты превзошёл комментаторов выше!Блять что за хуйня вы че анимацию то сделать не можете...
C++:if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha > 0.f) { float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime; ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha - fc / 255.f, 0.f, 1.f); } if (m_bIsMenuOpened && ImGui::GetStyle().Alpha < 1.f) { float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime; ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha + fc / 255.f, 0.f, 1.f); } if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha <= 0.f) return;
if (!_visible)
auto menu_alpha = 0.f;
menu_alpha = ImLerp(menu_alpha, _visible ? 1.f : 0.f, ImGui::GetIO().DeltaTime * 8.f);
if (!_visible)
return;
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, menu_alpha);
if (menu_alpha < 0.01f)
return;
ImGui::End();
добавьImGui::PopStyleVar();
мерцает менюого, теперь ты изменяешь весь стайл имгуи, ты превзошёл комментаторов выше!
где-то доif (!_visible)
C++:auto menu_alpha = 0.f; menu_alpha = ImLerp(menu_alpha, _visible ? 1.f : 0.f, ImGui::GetIO().DeltaTime * 8.f);
и замени
наC++:if (!_visible) return;
послеC++:ImGui::PushStyleVar(ImGuiStyleVar_Alpha, menu_alpha); if (menu_alpha < 0.01f) return;
ImGui::End();
добавь
ImGui::PopStyleVar();
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz