我正在开发“技能计算器”,但是我遇到了这个问题。当将 3 放入输入字段时,它会显示 2 的经验...当放入时 2 进入输入字段,它是一个 null,即级别 1...它与 100 以内的所有数字相同,它显示较低的数字经验 56 将显示 55 经验。
function levelToExperience(goalLevel) {
var experience = 0;
for(var curLevel = 1 ; curLevel < goalLevel; curLevel += 1) {
experience = Math.floor(10 * Math.pow(curLevel, 3) - 10);
}
return Math.floor(experience);
}
// Convert experience to level
function experienceToLevel(goalExperience) {
var curExperience = 0;
for(var level = 1; level < 100; level += 1) {
curExperience += Math.floor(Math.floor(10 * Math.pow(level, 3)) - 10);
if(curExperience > goalExperience) {
break;
}
}
return level;
}
这个计算我使用 10L3 − 10 (L = level) level 2 = 70 exp 所以我不明白为什么 2 显示 0 而 3 显示 2 的经验。
最佳答案
for(var curLevel = 1 ; curLevel < goalLevel; curLevel += 1) {
问题出在这个循环上。当您向其中传递 2 时,如果 curLevel 小于 goalLevel(即 2),则继续,即 2。
所以你执行 Math.floor(10 * Math.pow(1, 3) - 10)
,结果是 0。
然后 curLevel 递增,但是 curlevel 不小于 2,因此退出返回 0。
你不必循环,我想你只是想知道达到目标需要多少经验。
function levelToExperience(goalLevel) {
return Math.floor(10 * Math.pow(goalLevel, 3) - 10);
}
同样,如果您取该值的立方根,您的experienceToLevel可能会大大减少:
function experienceToLevel(goalExperience) {
return Math.cbrt((goalExperience + 10)/10);
}
关于javascript - 如何修复被移动超过 1 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55885567/