2013-11-13 3 views
0

См:«<= 0« Не предотвращать негативы?

-WORKING EXAMPLE-

Как скопировать мою * проблему:

Если вы сложите все свои бонусные очки в стат, кроме 1, а затем CTRL-CLICK в другом стате , то бонусное значение переходит в отрицательный, когда * он должен остановиться на 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; 
} 
} 
+0

FYI Вы пропускаете последний параметр в ваших ParseInt вызовов. Это может привести к мучительным результатам. – MBillau

+0

В чем смысл? Значение 1, положительное, то вы вычитаете 4. Ваше состояние работает, логика здесь не работает ... Попробуйте «если бонус LittleSweetSeas

+0

@richadtz Ответ решает все для меня. Спасибо за ваши мысли. – user2811882

ответ

3

вы должны заменить (в методе dump) этот

if(BonusVal.value <= 0) return; 
    var newBonus = parseInt(BonusVal.value) - 4; 

с этим:

var newBonus = parseInt(BonusVal.value) - 4; 
    if(newBonus <= 0) return; 
+0

Так просто! Спасибо, например, за моего друга. – user2811882

3

Кажется, вы проверяете существующее значение для бонуса, прежде чем приступать к любой корректировке. Таким образом, если бонус был указан 1, и вы пытались удалить 5 из него, проверка будет показывать значение в 1 и продолжить математику, чтобы изменить значение на -4.

Я предполагаю, что вы хотите применить математику, а затем проверить на 0 после этого и настроить на 0, если значение < 0.

+0

Проблема с настройкой на 0 - это то, что выделенная сумма будет равна 5. Она решает проблему с бонусным значением, но это только половина проблемы. – user2811882

+0

Я не понимаю, что сумма выделяет проблему. Если вам нужно определить фактическую сумму, которую вы выделили, просто вычтите исходное значение из нового значения после настройки. –

+0

@richadtz Ответ решает все для меня. Спасибо за ваши мысли. – user2811882

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

Проблема с настройкой на 0 заключается в том, что выделенная сумма будет равна 5. Она решает проблему с бонусным значением, но это только половина проблемы. Другая половина состоит в том, что 5 баллов волшебным образом созданы из воздуха, который закручивает все. @richadtz Ответ решает все для меня. Спасибо за ваши мысли. – user2811882

+0

, когда вы запускаете дамп, добавление запускает тоже ... вам нужно вызвать только один ... –

+0

Я реорганизую одну часть и покажу вам –

Смежные вопросы