玩家等级功能无法正常工作

时间:2017-07-24 16:57:45

标签: javascript

我正在创建一个非常简单的基于文本的RPG来测试我的技能。我是JS的初学者,我正在使用它来学习和磨练我现有的技能,所以如果这看起来非常基础,请耐心等待。

实际上,我创建了一个功能,可以检查玩家当前EXP是否等于或大于玩家所需的EXP。它的效果非常好,因为它实际上可以提升我的玩家并提供技能点等。

这是功能:

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

例如,假设您所需的EXP为100,并且您获得120 EXP点。它不会将20 EXP添加到下一个级别,而是始终重置为0.我知道我已将其设置为执行此操作,但我想知道如何绕过它。我仍然希望EXP栏清空并从0开始(+从前一级继续的额外EXP)。

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

提前致谢。

3 个答案:

答案 0 :(得分:0)

如果水平与所需数量成正比,则很容易:

 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;

http://jsbin.com/rogolapume/edit?console

答案 1 :(得分:0)

你需要做的就是解决这些问题,从一开始就再次使用你的逻辑。上面的代码使玩家升级并重置栏。您没有检查您的玩家获得的EXP是否分别大于或等于所需金额 相反,你应该做的是:

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

一个友好的说明:这个逻辑需要更多的工作,例如,如果玩家获得exp等于两个级别怎么办?

答案 2 :(得分:0)

您可以使用for循环来迭代您所需的级别体验,并在每个循环中减去所需级别的exp需求量。在某些时候,你将达到一个需要经验高于你的经验的水平,此时返回水平。



var exp = document.querySelector(".exp");
var levelDOM = document.querySelector(".currentLevel");
exp.addEventListener('input', function (evt) {
	var newValue = getExp(exp.value);
  levelDOM.innerHTML = newValue;
  console.log(newValue)
});

var level = [100, 200, 300, 600, 700, 800, 1000];


function getExp(exp) {
	for(var i = 0; i < level.length; i ++) {
  	if(exp > level[i]) {
    	exp -= level[i];
    } else {
    	return i + 1;
    }
  }
  return 1;
}
&#13;
<input type="number" class="exp" />
Current Level : <span class="currentLevel"></span>
&#13;
&#13;
&#13;