0

見る:

-実施例-

*問題を再現する方法:

すべてのボーナス ポイントを 1 以外の統計に入れ、次に他の統計で CTRL-クリックすると、ボーナス値は*0 で停止するはずのときにマイナスになります。

コントロール:

  • 左クリック = 1 ポイントを割り当てる
  • CTRL 左クリック = 5 ポイントを割り当てる
  • 右クリック = 1 ポイントを取り戻す
  • CTRL 右クリック = 5 ポイントを取り戻す

JavaScript:

var Alexander =
    {
      Magic: "MagicVal",
      Attack: "AttackVal",
      Bonus: "BonusVal",
      Limits: {
        Magic:  {
          max: 100,
          min: 80
        },
        Attack: {
          max: 100,
          min: 80
        }
        }
    };

function table(e)
{
  e.preventDefault();
}

function add(character, stat) //Allocates "1" with left-click//
{
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) + 1;
  if(newNumber > character.Limits[stat].max) return;
  var BonusVal = document.getElementById(character.Bonus);
  if(BonusVal.value <= 0) return;
  var newBonus = parseInt(BonusVal.value) - 1;
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}

function subtract(character, stat) //Takes back "1" with right-click//
{
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) - 1;
  if(newNumber < character.Limits[stat].min) return;
  var BonusVal = document.getElementById(character.Bonus);
  var newBonus = parseInt(BonusVal.value) + 1;
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}

function dump(e, character, stat) //Allocates "5" with CTRL+left-click//
{
  if (e.ctrlKey == 1 && e.which == 1) {
  console.log('met');
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) + 4;
  if(newNumber > character.Limits[stat].max) return;
  var BonusVal = document.getElementById(character.Bonus);
  if(BonusVal.value <= 0) return;
  var newBonus = parseInt(BonusVal.value) - 4;
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}
}

function reclaim(e, character, stat) //Takes back "5" with CTRL+right-click//
{
  if (e.ctrlKey == 1 && e.which == 3) {
  console.log('met');
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) - 4;
  if(newNumber < character.Limits[stat].min) return;
    var BonusVal = document.getElementById(character.Bonus);
  var newBonus = parseInt(BonusVal.value) + 4;
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}
}
4

3 に答える 3

3

ボーナスの調整を行う前に、ボーナスの既存の値を確認しているようです。したがって、ボーナスが 1 で、そこから 5 を削除しようとしている場合、チェックでは値が 1 と表示され、計算を続行して値を -4 に変更します。

私の推測では、数学を適用し、その後 0 に対してチェックし、値 < 0 の場合は 0 に調整する必要があると思います。

于 2013-11-13T16:56:56.940 に答える
2

実例!...

http://jsbin.com/omigOti/1/edit

ボーナスがマイナスになるかどうかを確認する必要があります...この修正のように...

function add(character, stat) //Allocates "1" with left-click//
{
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) + 1;
  if(newNumber > character.Limits[stat].max) return;
  var BonusVal = document.getElementById(character.Bonus);
  if(BonusVal.value <= 0) return;
  var newBonus = parseInt(BonusVal.value) - 1;
  if( newBonus < 0 ){ //try if is negative

    newBonus = 0; //and fix it
    newNumber = +(BonusVal.value);

  } 
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}

function dump(e, character, stat) //Allocates "5" with CTRL+right-click//
{
  if (e.ctrlKey == 1 && e.which == 1) {
    debugger;
    console.log('met');
    var txtNumber = document.getElementById(character[stat]);
    var newNumber = parseInt(txtNumber.value) + 4;
    if(newNumber > character.Limits[stat].max) return;
    var BonusVal = document.getElementById(character.Bonus);
    if(BonusVal.value <= 0) return;
    var newBonus = parseInt(BonusVal.value) - 4;
    if( newBonus < 0 ){ //try if is negative

      newBonus = 0; //and fix it
      newNumber = +(BonusVal.value);

    } 
    BonusVal.value = newBonus; 
    txtNumber.value = newNumber;
  }
}
于 2013-11-13T17:03:51.740 に答える