这个功能有什么问题?当我为exp
使用31时,此函数变为无限循环!我该如何解决这个问题?如果可以,请帮助并优化此功能,谢谢。
public function exp_calc($exp)
{
$level2 = 30; // Required EXP for 2nd level
$current_lvl = 0; // Current level
$level = 0; // Required EXP for next level
while((int)$level <= $exp)
{
$level += $level2;
$level2 *= 0.25;
$current_lvl++;
}
if($current_lvl >= 80)
$current_lvl = 80;
return array ($current_lvl, (int)$level);
}
答案 0 :(得分:3)
$level2 *= 0.25;
1 2 3
30 7.5 1.125
我认为你的意思是* = 1.25,以指数级增加下一级所需的经验数量:)。
我认为当前函数限制在40以下(获得一些微积分来计算限制;))。
编辑;澄清(因为我虽然还没有):
第一级现在需要30个; 二级需要7.5额外的exp;总计37.5 三级需要1.125 exp;总计38.625 等
使用时* = 1.25;达到下一个级别所需的exp数量实际上增加了:
30 -> 37.5 -> 46.875 -> 58.594 -> etc
答案 1 :(得分:1)
我不确定你想要的结果是什么,但它成为一个无限循环的原因是每次迭代你使$ level2变小(其大小的四分之一),直到最终它实际上变为0。不会退出,直到$ level与$ exp一样大(或等于),一旦$ level2变为0,这将永远不会发生。没有做数学我猜31是$ level2变得太小时永远无法达到的阈值增加。