2015-06-06 2 views
0

Вот моя проблема. Я работаю над FPS с системой боеприпасов Counter-Strike/TF2esque. Моя проблема заключается в том, что моя текущая формула дает некоторые странные, глючные результаты, когда один перезаряжается из состояния 1/1 боеприпасов (как в одном камерном, одном резерве). Моя система будет производить дополнительный раунд из воздуха. Это моя текущая формула:Резерв Аммо Формула

myReserve = myReserve - (magSize - boolet); 
     boolet = magSize; 
     if (myReserve < 0){ 
      myReserve = 0; 
} 

ли кто-нибудь есть программное решение этой проблемы (или даже лучше, чистая математика)? Код UnityScript, если это необходимо. Спасибо!

ответ

0

Ваш код явно создает боеприпасы с этим оператором if, так как вы поворачиваете отрицательные значения myReserve в ноль. Позвольте мне реорганизовать свой код, это именно то, что вы код делает сейчас:

var transferedAmmo = magSize - boolet; 
myReserve -= transferedAmmo; 
boolet += transferedAmmo; 
if (myReserve < 0) 
    myReserve = 0; 

Если вам нужно спросить, если myReserve < 0, вы уже должны сказать, что вы делаете что-то неправильно. Переданный Ammo никогда не должен превышать myReserve:

var transferedAmmo = Mathf.Min(magSize - boolet, myReserve); 
myReserve -= transferedAmmo; 
boolet += transferedAmmo; 
+0

Ваш код - C++, голова к кому-либо другому, используя это решение. Работает отлично. –

+0

oops, теперь это javascript –

+0

Прошу прощения, но все в порядке. Это было не так сложно изменить декларации. –

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