我数学真的很差,我不会计算下面的东西。。我有两列,分别命名为experience
和level
。
如果experience
超过200,则level
正在更新为1
如果experience
超过500,则level
正在更新为2
我的意思是我从未重置experience
。
所以,我有一个加载条的图像,我必须计算百分比的长度。我试过这种
function lvlbar($xp, $level){
if($level == 0)
{
$percent = @round(($xp / 200)*100);
}
elseif($level == 1){
$percent = @round(($xp / 500)*100);
}
elseif($level == 2){
$percent = @round(($xp / 900)*100);
}
elseif($level == 3){
$percent = @round(($xp / 1400)*100);
}
elseif($level == 4){
$percent = @round(($xp / 1900)*100);
}
elseif($level == 5){
$percent = @round(($xp / 2500)*100);
}
elseif($level == 6){
$percent = @round(($xp / 3200)*100);
}
elseif($level == 7){
$percent = @round(($xp / 4000)*100);
}
elseif($level == 8){
$percent = @round(($xp / 4900)*100);
}
elseif($level == 9){
$percent = @round(($xp / 5800)*100);
}
elseif($level == 10){
$percent = @round(($xp / 6800)*100);
}
return $percent;
}
当你处于1
级以下时,它运行良好,但一旦达到2
级,计算就会出错,百分比从50、60左右开始。。我想这是我的公式。帮助我完成
您的概念看起来不错,但有一个小错误。每个级别的体验栏都需要重置。例如,当经验为350时,您希望显示50%。
这意味着,你的公式是:
进入下一级别的百分比=当前级别的经验/进入下一级所需的经验
再次举个例子:
当经验为350=(350-200)/(500-200)=50%时,达到2级的百分比
我并不完全理解这个问题,因此无法提出确切的解决方案。但这肯定是混乱的重复代码!我认为最好是你们除以的那个数字在同一时间增加。所以在不知道它在做什么的情况下,比如:
function goUpLevel(){
$level++;
$experienceMax = $level * $experienceLevelMultiplier;
}
然后你发布的功能会更简单,比如:
function lvlbar($xp, $level){
$percent = @round(($xp / $experienceMax)*100);
}
如果你无法计算$experienceLevelMultiplier的乘数,那么可以为每个级别计算一组值,即
$experienceLevelMultiplierArray = array (
1 => 10
2 => 15.5
);
这看起来更好,规模更好,更易于管理和理解!如果你描述一下这个问题的背景,我肯定能帮上忙!
免责声明:我已经很久没有做PHP了,所以请忽略任何错误。我在传达一个想法,而不是一个确切的解决方案。
这几乎是我要做的。正如之前的海报所提到的,在升级时必须调整xp。
function lvlbar($xp, $level){
$levels = array(
0 => 200,
1 => 500,
2 => 900,
3 => 1400,
4 => 1900,
5 => 2500,
6 => 3200,
7 => 4000,
8 => 4900,
9 => 5800,
10 => 6800
);
if (array_key_exists($level, $levels)) {
$lastlevelXp = !empty($levels[$level-1]) ? $levels[$level-1] : 0;
$adjustedXp = $xp - $lastlevelXp;
$adjustedLevelMax = $levels[$level] - $lastlevelXp;
$percent = round(($adjustedXp / $adjustedLevelMax)*100);
}
return !empty($percent) ? $percent : 0;
}
示例输出:
Level 0 with 95xp: 48%
Level 1 with 370xp: 57%
Level 2 with 640xp: 35%
Level 3 with 1150xp: 50%
Level 4 with 1405xp: 1%
Level 5 with 2400xp: 83%
Level 6 with 3180xp: 97%
Level 7 with 3999xp: 100%
如果您的问题处于3级,请查看您的数学条件:
elseif($level == 3){
$percent = @round(($xp / 1400)*100);
}
如果$xp=900,请使用计算器,并将其除以1400,就像上面的计算一样。
然后将结果乘以100,四舍五入的结果是64%,所以数学回归正确,这只是一个错误的方程。
如果你想让百分比栏回到0(不包括栏中以前的经验),你需要减去上一级别的金额。
此外,我建议使用switch()。
试试这个:
function lvlbar($xp, $level){
switch($level) {
case 0:
$percent = @round(($xp / 200)*100);
case 1:
$percent = @round((($xp - 200) / 500)*100);
case 2:
$percent = @round((($xp - 500) / 900)*100);
case 3:
$percent = @round((($xp - 900) / 1400)*100);
case 4:
$percent = @round((($xp - 1400) / 1900)*100);
case 5:
$percent = @round((($xp - 1900) / 2500)*100);
case 6:
$percent = @round((($xp - 2500) / 3200)*100);
case 7:
$percent = @round((($xp - 3200) / 4000)*100);
case 8:
$percent = @round((($xp - 4000) / 4900)*100);
case 9:
$percent = @round((($xp - 4900) / 5800)*100);
case 10:
$percent = @round((($xp - 5800) / 6800)*100);
}
return $percent;
}