求助:实现基于XP计算等级与0-99进度百分比的函数
完善等级进度百分比计算函数
首先从现有等级公式反推所需的XP计算逻辑:
已知等级公式为 level = (3/2) * Math.sqrt(xp),变形后可得到对应等级所需的最低XP公式:
xp = (level / 1.5) ** 2
基于这个公式,我们可以计算当前XP在所处等级区间内的进度,最终返回0-99的整数百分比:
// 等级计算函数 function calculateLevel(xp: number): number { return 3/2 * Math.sqrt(xp); } // 完善后的百分比计算函数(返回0-99) function calculatePercentage(xp: number): number { const currentLevel = calculateLevel(xp); // 获取当前所处的整数等级(比如5.8对应5级) const currentFloorLevel = Math.floor(currentLevel); // 计算当前等级所需的最低XP const currentLevelXp = (currentFloorLevel / 1.5) ** 2; // 计算下一级所需的最低XP const nextLevelXp = ((currentFloorLevel + 1) / 1.5) ** 2; // 计算当前XP在当前等级区间内的进度比例 const progressRatio = (xp - currentLevelXp) / (nextLevelXp - currentLevelXp); // 转换为0-99的整数百分比(避免出现100,因为达到100%时已升级) const percentage = Math.floor(progressRatio * 100); // 边界处理:确保返回值在0-99范围内 return Math.max(0, Math.min(99, percentage)); }
逻辑说明:
- 通过
calculateLevel得到当前浮点等级,取整数部分确定当前所处的等级阶段 - 计算当前等级和下一级的XP阈值,两者差值就是当前等级所需的总XP量
- 用当前XP减去当前等级的最低XP,得到已积累的进度XP,再除以当前等级总XP量得到比例
- 将比例转为整数百分比,通过
Math.max和Math.min确保结果始终在0-99之间
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

