Ян Дворжак указывает на экспоненциальную функцию в комментарии. Я объясню это здесь.
Обратите внимание, что экспоненциальные (и триггерные) операции значительно дороже в вычислительном отношении, чем даже операции с квадратным корнем, которые сами по себе намного хуже, чем базовая математика, поэтому, вероятно, вам лучше использовать подход Адама, если вы будете выполнять эти вычисления много раз в секунду , Если вы просто рассчитываете значения, когда уровень игрока, смена снаряжения и т. Д., Скорость не важна, так что используйте то, что дает лучшую кривую.
Экспоненциальная функция некоторое основание, Б , в некоторой степени, х , y=B^x
. Математики обычно используют основание e (~ = 2.718), но нет причин, по которым вы не можете использовать 2 или 10, если хотите.
y=e^x
выглядит так:
Обратите внимание, что левая сторона асимптотически движется к 0. Таким образом, мы можем перевернуть ось х, выполнив y=e^(
-x)
, но она все еще уменьшается от 1 до 0, и мы хотим, чтобы она поднималась. Таким образом, мы можем перевернуть его по оси Y с помощью y=
-e^(-x)
. Теперь это возрастание от -1 до 0. Мы можем добавить 1, чтобы получить y=
1,- e^(-x)
и это возрастание от 0 до 1.
Отсюда, это просто вопрос масштабирования по вертикали и горизонтали. Мы можем умножить всю вещь на некоторое значение, назовем это A , которое устанавливает асимптотический предел. Затем мы можем умножить x на значение скорости изменения k , чтобы скорректировать, насколько быстро оно приближается к пределу.
Это дает нам окончательное уравнение y=A*(1 - e^(-k*x))
. Используя значения k=0.012
and A=0.5
, мы можем установить ограничение в 50% и позволить ему приблизиться к этому пределу x=400
.
Теперь вы можете сделать несколько изменений в этом. Один твик, который я сделал, менялся A=0.5041
, поэтому, если мы округлим до процента с двумя десятичными знаками (например, 32,23%), y (399) = 49,99% и y (400) = 50,00%. Начиная с y (347), есть несколько мест, где требуется 2 очка, чтобы получить изменение в 0,01%. Но этот последний возможный момент все еще дает (едва) ощутимое преимущество и доводит его до 50%.
С другой стороны, мы можем настроить k
значение, чтобы получить аналогичный эффект. При k=0.02305
значении округляется до 49,99% при y=399
и 50,00% при y=400
. Однако проблема заключается в том, что в конце график очень неглубокий - для получения последней сотой процента (от y(352)=49.99%
до y(399)=49.99%
до y(400)=50.00%
) требуется 48 баллов, а последний шанс крита в 1% получает колоссальные 230 баллов (от y(170)=49.01%
до y(400)=50.00%
) что, вероятно, слишком уменьшается при возврате.
Если вы хотите, вы можете отрегулировать как A, так и k, чтобы оно уменьшалось до несколько более высокого предела с более медленной скоростью, чтобы получить что-то среднее между линейным и экспоненциальным затуханием. Делая y=0.6*(1-e^(-0.00447*x))
, вы в конечном итоге с этим:
Обратите внимание, что кривая продолжается более 50%, но, поскольку существует жесткий предел в 400 баллов, игрок не может пройти этот балл (и, если ему все-таки удастся его пройти, остаётся жесткий предел в 60% крит). С помощью этого уравнения вы можете использовать 1 знак после запятой и по-прежнему видеть увеличение каждые 2–3 балла с последним тиковым значением от y(399)=49.9%
до y(400)=50.0%
.
Математически, более ранние уравнения могут показаться лучше, поскольку на самом деле они приближаются к 50%, но я лично считаю, что прирост на 0,1% в каждой паре очков кажется лучше, чем прирост на 0,01%. Даже с A=0.05041
и k=0.012
, требуется 102 балла, чтобы перейти от y(298)=49.00%
к y(400)=50.00%
. 25% ваших очков, потраченных на 2% вашего крита, вероятно, слишком уменьшены. Уравнение 60% берет только 20 баллов за последний процент (что все еще в 5 раз выше, чем 4 балла, необходимых для первого процента).
С этими последними несколькими уравнениями я просто включил уравнения в электронную таблицу и вручную настраивал значения, пока они не выглядели хорошо. Вам бы пришлось сделать что-то похожее, если бы вы хотели другую шапку.