我正在使用“技能计算器”,但是遇到了这个问题。将3放入输入字段时,将显示2 ...的经验 2在输入字段中是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 =级别)级别2 = 70 exp进行此计算,所以我不明白为什么2显示0,而3显示2的经验。
答案 0 :(得分:2)
for(var curLevel = 1 ; curLevel < goalLevel; curLevel += 1) {
问题是此循环。当您将2传递给它时,如果curLevel小于targetLevel,即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);
}