Javascript 玩家调平功能不工作,我想怎么做

Javascript 玩家调平功能不工作,我想怎么做,javascript,Javascript,我正在创建一个非常简单的基于文本的RPG来测试我的技能。说到JS,我是一个初学者,我用它来学习和磨练我现有的技能,所以如果这看起来真的很基本,请容忍我 实际上,我创建了一个函数来检查玩家当前的经验值是否等于或大于玩家所需的经验值。它非常有效,因为它实际上可以提高我的玩家水平,并提供技能点数等 以下是函数: function getExp(amt) { player.currentExp += amt; if (player.currentExp >= pla

我正在创建一个非常简单的基于文本的RPG来测试我的技能。说到JS,我是一个初学者,我用它来学习和磨练我现有的技能,所以如果这看起来真的很基本,请容忍我

实际上,我创建了一个函数来检查玩家当前的经验值是否等于或大于玩家所需的经验值。它非常有效,因为它实际上可以提高我的玩家水平,并提供技能点数等

以下是函数:

    function getExp(amt) {
      player.currentExp += amt;
      if (player.currentExp >= player.reqExp) {
        player.level ++;
        player.reqExp = (player.level * 100) + ((player.level * 10) * 4);
        player.currentExp = 0;
        player.points += 5;
      }
    }
比如说,你需要的经验是100,你得到120经验点。它将始终重置为0,而不是将20 EXP添加到下一个级别。我知道我已经让它这么做了,但我想知道我如何才能摆脱这个困境。我仍然希望EXP条为空,并从0开始重新开始(+从上一级别带入的额外EXP)

我正在为HP、MP和EXP使用HTML进度条


提前感谢。

如果液位与所需量成比例,则很容易:

 player.level += Math.floor(player.currentExp/100);
 player.currentExp=player.currentExp%100;
如果您想要持续增加所需的exp,可以这样做:

 player.requiredExp=100;

 function getExp(val){
  player.currentExp+=val;
  while(player.currentExp>=player.requiredExp){
    player.requiredExp=player.requiredExp+100;//or some other algorithm
    player.level++;
    player.currentExp-=player.requiredExp;
  }
 }
一个指向播放器的函数,应该是播放器对象的一部分,而你的函数名并没有被明智地选择(其他人可能会想在什么时候使用你的代码),所以我将如何编写它:

var player={
  level:0,
  _exp:0,
  set exp(value){
    this._exp+=value;
    this.level += Math.floor(this._exp/100);
    this._exp=this._exp%100;
  },
  get exp(){ return this._exp}
};
因此,您可以轻松做到:

player.exp+=500;

要解决此类问题,您所要做的就是从一开始就重新运行您的逻辑。上面的代码将使播放器升级,并重置条。您没有单独检查玩家获得的经验值是否大于或等于所需金额。
相反,您应该做的是:

function getExp(amt) {
  player.currentExp += amt;
  if (player.currentExp == player.reqExp) { //the amount gained is equal to the required
    player.level ++;
    player.reqExp = (player.level * 100) + ((player.level * 10) * 4);
    player.currentExp = 0;
    player.points += 5;
  } else if (player.currentExp > player.reqExp){//the amount gained is greater than the required one
    //calculate the extra EXP gained
    var extra = player.currentExp - player.reqExp;
    player.level ++;
    player.reqExp = (player.level * 100) + ((player.level * 10) * 4);
    player.currentExp = extra;
    player.points += 5;
}

一个友好的提示:这个逻辑需要更多的工作,例如,如果玩家获得的经验值等于两个等级,该怎么办?

你可以使用for循环来迭代你所需的等级经验值,只需减去每个循环中所述等级的经验值。在某一点上,你将达到一个需要的经验高于你的经验的水平,在这一点上,返回该水平

var exp=document.querySelector(“.exp”);
var levelDOM=document.querySelector(“.currentLevel”);
exp.addEventListener(“输入”,函数(evt){
var newValue=getExp(exp.value);
levelDOM.innerHTML=newValue;
console.log(newValue)
});
风险值水平=[1002003006007008001000];
函数getExp(exp){
对于(变量i=0;ilevel[i]){
exp-=水平[i];
}否则{
返回i+1;
}
}
返回1;
}


当前级别:
以get开头的函数应该返回一些内容。可以将其重命名为set/increase/add吗?您的问题是什么,您是否只想携带剩余的分数?