2015-08-02 3 views
-2

Я пытаюсь создать игру Javscript, и я немного озадачен аспектом процесса создания персонажа.Распределение конечных значений через Javascript

Моя игра имеет пять точек на основе черты:

  1. Endurance
  2. Сила
  3. Восприятие
  4. Luck
  5. харизмы

Каждый признак установлен на "5" первоначально, и есть 5 доступных точек для добавления. Очевидно, всего 30 баллов.

Я стараюсь, чтобы мой абсолютный труднее всего сделать весь этот проект с помощью простого javascript ванили, без jQuery.

Мой вопрос заключается в том, как создать форму, которая позволит вам их распространять. У меня было две идеи, но я не уверен, что первый из них практичен без jQuery: Первый из них будет состоять из двух текстовых входов и обновит «доступные точки» при изменении. Я должен признаться, однако, что я понятия не имею, как это сделать, и обновить его без jQuery. Второй - иметь плюсовые или минусовые образы, которые при щелчке обновляли доступные точки.

Кто-нибудь сделал что-то подобное раньше?

+1

Ни один из этих подходов трудно. Найдите себе вводный учебник по JavaScript DOM, а затем задайте здесь вопрос, если у вас есть более конкретная проблема. – Quentin

+0

Хотя это может привести к большему количеству кода, нет ничего разумного DOM, которое вы можете сделать с помощью JQuery, который не может быть завершен с помощью raw JS ... – WhiteHat

+0

jQuery - это простой javascript. –

ответ

-1

Добро пожаловать в чистую и трезвую VanillaJS! Симптомы отмены зависимости JQuery являются болезненными, но временными.

;(function (window, document, undefined) { 
 
    "use strict"; 
 

 
    var sliders = document.querySelectorAll('input[type="range"]'); 
 
    var maxPoints = 30; 
 
    var availablePoints = 30; 
 
    var o = document.querySelector('#o'); 
 

 
    var getTotal = function() { 
 
     var total = 0; 
 
     [].forEach.call(sliders, function (slider) { 
 
      total = total + slider.valueAsNumber; 
 
     }); 
 
     return total; 
 
    }; 
 

 
    var handleChange = function (ev) { 
 
     availablePoints = maxPoints - getTotal(); 
 
     if (availablePoints < 0) { 
 
      this.value = this.dataset.lastKnownValue; 
 
      availablePoints = 0; 
 
     } else { 
 
      this.dataset.lastKnownValue = this.valueAsNumber; 
 
     } 
 
     this.nextSibling.nextSibling.innerHTML = this.value; 
 
     o.innerHTML = availablePoints; 
 
    }; 
 
    
 
    [].forEach.call(sliders, function (slider) { 
 
     slider.addEventListener('input', handleChange); 
 
     slider.dataset.lastKnownValue = 0; 
 
    }); 
 

 
})(window, document);
label { 
 
    float: left; 
 
    clear: left; 
 
    width: 250px; 
 
} 
 
label input { 
 
    float: right; 
 
    width: 10em; 
 
} 
 
label span { 
 
    color: red; 
 
    width: 1em; 
 
    float: right; 
 
} 
 
output { 
 
    color: green; 
 
    font-weight: bold; 
 
} 
 
hr { 
 
    clear: both; 
 
}
<form id="f"> 
 
    <label for="endurance">Endurance 
 
     <input type="range" id="endurance" value="0" min="0" max="10" step="1" /> 
 
     <span>0</span> 
 
    </label> 
 
    <label for="strength">Strength 
 
     <input id="strength" type="range" value="0" min="0" max="10" step="1" /> 
 
     <span>0</span> 
 
    </label> 
 
    <label for="perception">Perception 
 
     <input id="perception" type="range" value="0" min="0" max="10" step="1" /> 
 
     <span>0</span> 
 
    </label> 
 
    <label for="luck">Luck 
 
     <input id="luck" type="range" min="0" value="0" max="10" step="1" /> 
 
     <span>0</span> 
 
    </label> 
 
    <label for="charisma">Charisma 
 
     <input id="charisma" type="range" value="0" min="0" max="10" step="1" /> 
 
     <span>0</span> 
 
    </label> 
 
</form> 
 
<hr />Availible Points: 
 
<output for="f" id="o"></output>

+0

Спасибо за помощь, sean9999. Опять же, извинения за широкий вопрос. Я просто понятия не имел, где даже начать с этого, так как я не нашел ничего в сети о подобных ситуациях. – RGStrat

+0

Я пробовал немного модифицировать ваш код, так что он меняет максимальные значения входов в зависимости от количества оставшихся точек. Моя проблема в том, что я не могу понять, как выбрать значение каждого отдельного входа и добавить к нему «доступные точки», одновременно изменяя все макс. Есть идеи? Вот что я до сих пор на jsfiddle: http://jsfiddle.net/mLuwa2z2/ – RGStrat

+0

Я думаю, что изменение максимального значения не было бы подходящим подходом, потому что это представляло бы проблемы с пользовательским интерфейсом (установка ползунка полностью вправо в некоторых случаи будут означать 10, а в других случаях - меньше). Я решил это, добавив «lastKnownValue» к каждому элементу и установив вход обратно к этому значению, если общие значения превышают 30. Таким образом, ваш слайдер диапазона «отбрасывается», если вы пытаетесь установить недопустимое значение. http://jsfiddle.net/sean9999/7zhox1r8/3/ –

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