小黄人直装[主频道]
Открыть в Telegram
广告或者互管联系 @xhrzz 对了 我这里强调一下 我们不是之前的小黄人了 我只是比较喜欢看小黄人小时候 我才把直装名字取成小黄人的 我们并不是回归项目 也不是复活项目 纯个人喜好制作的项目 之前听说也有小黄人这款直装 我没有冒犯他的意思 我只是想自己做好一个直装 源码这些我们也是自己弄 没有得罪任何人
БольшеСтрана не указанаКатегория не указана
1 336
Подписчики
-524 часа
+1037 дней
+48830 дней
Архив постов
1 337
static float animScale = 1.0f;
static float animVelocity = 0.0f;
static const float targetScale = 1.0f;
static const float springK = 24.0f;
static const float dampingC = 6.0f;
char 数字文本[32];
char 名称文本[32];
int 总人数 = totalEnemies + totalBots;
// 无人显示0,有人显示真实数量
if (总人数 <= 0)
{
sprintf(数字文本, "%d", 0);
}
else
{
sprintf(数字文本, "%d", 总人数);
}
sprintf(名称文本, "小黄人");
// 字体尺寸计算
float 原始字体大小 = 22.0f * 2.0f;
ImFont* 字体指针 = ImGui::GetFont();
ImVec2 数字尺寸 = 字体指针->CalcTextSizeA(原始字体大小, FLT_MAX, 0.0f, 数字文本);
ImVec2 名称尺寸 = 字体指针->CalcTextSizeA(原始字体大小, FLT_MAX, 0.0f, 名称文本);
float 行间距 = 8.0f * 2.0f;
float 单行最大宽度 = max(数字尺寸.x, 名称尺寸.x);
float 原始框X = (Width - 单行最大宽度) / 2.0f;
float 原始框Y = 60.0f;
// 弹簧物理更新
float dt = ImGui::GetIO().DeltaTime;
if (dt > 0.05f)
dt = 0.05f;
float force = springK * (targetScale - animScale) - dampingC * animVelocity;
animVelocity += force * dt;
animScale += animVelocity * dt;
if (animScale < 0.6f)
animScale = 0.6f;
if (animScale > 1.4f)
animScale = 1.4f;
if (fabs(animScale - targetScale) < 0.001f && fabs(animVelocity) < 0.001f)
{
animScale = targetScale;
animVelocity = 0.0f;
}
// 缩放参数
float 当前字体大小 = 原始字体大小 * animScale;
float 当前行间距 = 行间距 * animScale;
ImVec2 当前数字尺寸 = 字体指针->CalcTextSizeA(当前字体大小, FLT_MAX, 0.0f, 数字文本);
ImVec2 当前名称尺寸 = 字体指针->CalcTextSizeA(当前字体大小, FLT_MAX, 0.0f, 名称文本);
// 文字坐标
数字位置 = ImVec2(
原始框X + (单行最大宽度 - 当前数字尺寸.x) * 0.5f,
原始框Y
);
ImVec2 名称位置 = ImVec2(
原始框X + (单行最大宽度 - 当前名称尺寸.x) * 0.5f,
数字位置.y + 当前数字尺寸.y + 当前行间距
);
// 纯红色文字绘制,无任何背景边框
draw->AddText(字体指针, 当前字体大小, 数字位置, IM_COL32(255, 0, 0, 255), 数字文本);
draw->AddText(字体指针, 当前字体大小, 名称位置, IM_COL32(255, 0, 0, 255), 名称文本);
// 点击交互
if (ImGui::IsMouseClicked(ImGuiMouseButton_Left))
{
ImVec2 mPos = ImGui::GetMousePos();
float 检测左 = min(数字位置.x, 名称位置.x);
float 检测右 = max(数字位置.x + 当前数字尺寸.x, 名称位置.x + 当前名称尺寸.x);
float 检测上 = 数字位置.y;
float 检测下 = 名称位置.y + 当前名称尺寸.y;
if (mPos.x >= 检测左 && mPos.x <= 检测右 && mPos.y >= 检测上 && mPos.y <= 检测下)
{
菜单 = !菜单;
animVelocity = -5.0f;
}
}1 337
