0

这个功能有什么问题?当我使用 31 forexp时,这个函数变成了一个无限循环!我该如何解决?如果可以的话,请帮我优化这个功能,谢谢。

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);
    }
4

2 回答 2

3

$level2 *= 0.25;

 1   2     3
30 7.5 1.125

我假设您的意思是* = 1.25,以指数方式增加下一个级别所需的经验量:)。

我认为当前的函数限制在 40 以下(获取一些微积分来计算限制;))。

编辑; 清除(因为我还没有):

一级现在总共需要 30 经验;二级需要 7.5 额外经验;三级共 37.5 需要 1.125 exp;总计 38.625 等。

使用 *= 1.25 时;达到下一个级别所需的 exp 量实际上会增加: 30 -> 37.5 -> 46.875 -> 58.594 -> etc

于 2011-09-23T14:11:04.420 回答
1

我不确定你想要的结果是什么,但它变成无限循环的原因是每次迭代你都会让 $level2 变小(它的大小的四分之一),直到最终它实际上变成 0。循环不会退出直到 $level 与 $exp 一样大(或等于),一旦 $level2 变为 0,这将永远不会发生。不做数学我猜 31 是永远无法达到的阈值,因为 $level2 变得太小而无法增加.

于 2011-09-23T14:11:40.297 回答