Problem
Gracz zdobywa 5 punktów na poziom do poziomu 80 z maksymalnie 400. Istnieje 5 statystyk do podziału i nie ma maksymalnego limitu, ile możesz dodać do statystyki.
- siła
- Wytrzymałość
- Inteligencja
- Zwinność
- Szczęście - Daje szansę na trafienie krytyczne i obrażenia krytyczne
Chciałbym zaimplementować malejące równanie zwrotu na powiedzmy Luck. W przypadku szansy na trafienie krytyczne nie chcę, aby gracz mógł trafić w 100% szansę na trafienie krytyczne.
Zostanie osiągnięty pułap, do którego zostanie on osiągnięty, gdy coraz bardziej malejący wzrost osiągnie wartość 0 za każdy dodany punkt.
Przykład: jeśli maksymalna szansa na trafienie krytyczne, jaką chcę mieć, wynosi 40%, Każdy punkt szczęścia zwiększy szansę na trafienie krytyczne coraz mniej, aż szansa na trafienie krytyczne osiągnie około 40%. Przez co 1 szczęście da bardzo, bardzo małą ilość.
Jakieś rozwiązania? Dziękujemy i twoja pomoc jest bardzo mile widziana!
Odpowiedzi:
Chcesz zacząć od funkcji asymptotycznej. Oznacza to, że zaczyna się od liczby
a
i zbliża do innej liczbyb
, ale nigdy jej nie osiąga. Prawdopodobnie będzie to najłatwiejsze, jeślia = 0
ib = 1
. Weźmiesz to równanie, wprowadzisz liczbę punktów statystyk (punktów szczęścia), którą ma postać, i uzyskasz rzeczywistą wartość statystyki (szansę na trafienie krytyczne) jako wynik.Bardzo prostym przykładem jest
y = x / (x + n)
gdzien
jest pewna dodatnia stała. Otox
twój wkład, w którym podajesz liczbę punktów statystyk, iy
twój wynik, w którym otrzymujesz ostateczną wartość statystyki.Aby
n = 5
sprawdzić, jak to wygląda:Kiedy się karmisz
x = 0
, dostajeszy = 0
, ale bez względu na to, jak dużyx
wkładasz,y
nigdy nie osiąga 1. Idealny.Teraz możesz dostroić to do swoich serc. Możesz pomnożyć przez współczynnik skali, aby ustawić „limit” na cokolwiek chcesz.
y = a * x / (x + 5)
. Jeśli chcesz, aby limit wynosił 40%, pomnóż przez .4.y = .4 * x / (x + n)
. Teraz, kiedy dodaszx
,y
zwiększy się, ale nigdy nie osiągnie .4.Dostosuj,
n
aby ustawić, jak szybko lub wolno zwiększa się równanie.n = 100
wzrośnie znacznie wolniej niżn = 5
:Możesz rozwiązać to równanie,
n
jeśli wiesz, że chcesz uzyskać wartość statystyki, którą chcesz osiągnąć przy określonej liczbie punktów statystyki. Powiedzmy, że postać powinna mieć 35% szansy na trafienie krytyczne przy 100 punktach szczęścia. Rozwiązywanie.35 = .4 * 100 / (100 + n)
dlan
plonówn = 14.29
.Te liczby nie muszą być również stałymi stałymi. Może inne statystyki zajmują się obliczaniem wartości
n
. Być może niektóre postacie mają różnen
, więc lepiej skalują się w swoich „preferowanych” statystykach.Jeśli chcesz mieć krzywą o innym kształcie lub bardziej złożoną, istnieje wiele innych przykładów funkcji asymptotycznych, których możesz użyć. Zostawię cię, byś to zbadał, jak chcesz.
źródło
P = x/(x+n)
jest prawdopodobieństwo, biorąc pod uwagę torbę z n czarnymi kamieniami i x białymi kamieniami, że wyciągniesz biały kamień z niewidomej torby. Jednym z podejść, które możesz zrobić, jest ustawienie zestawu krytycznego X = twoje szczęście, a N = ich szczęście. Twoja szansa na trafienie krytyczne wynosi 50%, jeśli masz tyle samo szczęścia co przeciwnik. Jeśli chcesz, aby podstawowa szansa wynosiła 10%, to my X = twoje szczęście, N = 9x ich szczęście.Dobra baza byłaby funkcją podobną
arctan
, ponieważ przechodzi przez początek i wykazuje poziomą asymptotę.Skaluj według
40 / (pi/2)
, lub80/pi
do żądanego limitu. Następnie przekształć,luck
aby uzyskać żądaną stromość krzywej.źródło
Naprawdę podoba mi się sposób, w jaki gry Souls rozwiązują ten problem. Zamiast sprawiać, by każda statystyka dawała premie oparte na funkcji ciągłej, jak zostało zasugerowane, daje bonusy w funkcji liniowej.
Nie pamiętam dokładnych liczb z góry mojej głowy, ale funkcje są zgodne z następującymi (każda statystyka ma własne stałe)
Ta metoda zapewnia wiele korzyści projektantowi i odtwarzaczowi. Projektant czerpie korzyści, ponieważ można dostroić dokładną korzyść na punkt umiejętności w dość trywialny sposób, a gracz zyskuje, ponieważ dokładnie wie, ile korzyści zobaczą z poziomu na poziom.
W przypadku funkcji ciągłej niektóre poziomy mogą dać korzyść, która nie zostanie odzwierciedlona w liczbach z powodu aliasingu pomiaru. Pewnie, że ostatni poziom dał ci wzrost o 0,9 premii XYZ, ale ponieważ rzeczywista wartość wzrosła z 23,52 do 24,42, a ty zaokrąglasz liczbę przed jej wyświetleniem, gracz nie zdaje sobie sprawy, że coś się zmieniło.
Z perspektywy UX zdecydowanie sugerowałbym skorzystanie z częściowej funkcji liniowej. Jednak użycie funkcji ciągłej może być łatwiejsze dostrajania później, ponieważ gracze nie będą tak przywiązani do stałych okrągłych.
źródło
ceil
do kwoty podwyższenia przed dodaniem, a pozwala jedynie całkowitą poziomów statystyk. lubfloor
potemx <= 0: x = 1
, aby uniknąć przypadkowego podchodząc miękką czapkę.Jan Dvorak wskazuje funkcję wykładniczą w komentarzu. Wyjaśnię to tutaj.
Zauważ, że operacje wykładnicze (i wyzwalające) są znacznie droższe obliczeniowo niż nawet operacje pierwiastkowe, które same w sobie są znacznie gorsze niż podstawowa matematyka, więc prawdopodobnie lepiej jest podejść Adama, jeśli będziesz wykonywać te obliczenia wiele razy na sekundę . Jeśli po prostu obliczasz wartości, gdy poziom gracza, zmiana wyposażenia itp., Prędkość nie jest ważna, więc używaj tego, co daje najlepszą krzywą.
Funkcja wykładnicza jest jakaś zasada, B , do jakiejś władzy, x ,
y=B^x
. Matematycy zwykle używają podstawy e (~ = 2,718), ale nie ma powodu, dla którego nie można użyć 2 lub 10, jeśli wolisz.y=e^x
wygląda tak:Zauważ, że lewa strona przesuwa się asympotycznie do 0. Więc możemy obrócić oś x, wykonując
y=e^(
-x)
, ale nadal spada ona z 1 do 0 i chcemy, żeby się wzniosła. Możemy więc obrócić go wzdłuż osi y za pomocąy=
-e^(-x)
. Teraz rośnie od -1 do 0. Możemy dodać 1, aby uzyskaćy=
1,- e^(-x)
a rosnąco od 0 do 1.Odtąd wystarczy skalować go w pionie i poziomie. Możemy pomnożyć całość przez pewną wartość, nazwijmy to A , która określa limit asymptotyczny. Następnie możemy pomnożyć x przez wartość szybkości zmiany k , aby dostosować, jak szybko zbliża się do limitu.
To daje nam końcowe równanie
y=A*(1 - e^(-k*x))
. Korzystając z wartościk=0.012
iA=0.5
, możemy ustawić limit na 50% i pozwolić zbliżyć się do tego limitux=400
.Teraz możesz wprowadzić kilka drobnych poprawek. Jedna poprawka, którą zrobiłem, zmieniała się na
A=0.5041
, więc jeśli zaokrąglimy do wartości procentowej z 2 miejscami po przecinku (jak 32,23%), y (399) = 49,99% i y (400) = 50,00%. Począwszy od roku y (347), istnieje kilka miejsc, w których potrzeba dwóch punktów, aby uzyskać zmianę o 0,01%. Ale ten ostatni możliwy punkt wciąż daje (ledwo) namacalną korzyść i sprowadza ją nawet do 50%.Alternatywnie, możemy dostosować
k
wartość, aby uzyskać podobny efekt. Atk=0.02305
, wartość zaokrągla do 49,99% oy=399
i 50,00% oy=400
. Jednak to nie ma problemu, że wykres jest bardzo płytkie na końcu - to ma 48 punktów, aby ta ostatnia setną procenta (ody(352)=49.99%
doy(399)=49.99%
celuy(400)=50.00%
), a ostatni 1% crit szansa trwa aż o 230 punktów (ody(170)=49.01%
doy(400)=50.00%
) co prawdopodobnie nieco zmniejsza się w przypadku zwrotów.Jeśli chcesz, możesz dostosować zarówno A, jak i k, więc zmniejsza się do nieco wyższego limitu w wolniejszym tempie, aby uzyskać coś między rozpadem liniowym a wykładniczym. Robiąc
y=0.6*(1-e^(-0.00447*x))
, kończysz z tym:Zauważ, że krzywa nadal przekracza 50%, ale ponieważ istnieje twardy limit oceny 400, gracz nie może przekroczyć tego punktu (a jeśli uda się go przekroczyć, nadal istnieje twardy limit 60% wartości krytycznej). Za pomocą tego równania możesz użyć 1 miejsca po przecinku i nadal widzieć zyski co 2 do 3 punktów, z ostatnim tyknięciem od
y(399)=49.9%
doy(400)=50.0%
.Matematycznie wcześniejsze równania mogą wydawać się lepsze, ponieważ w rzeczywistości zbliżają się do 50%, ale osobiście uważam, że wzrost o 0,1% na każdą parę punktów jest lepszy niż wzrost o 0,01%. Nawet z
A=0.05041
ik=0.012
, potrzeba 102 punktów, aby przejść ody(298)=49.00%
doy(400)=50.00%
. 25% punktów wydanych na 2% twojego krytycznego jest prawdopodobnie zbyt zmniejszone. Równanie 60% zajmuje tylko 20 punktów za ostatni procent (który jest nadal 5 razy wyższy niż 4 punkty potrzebne na pierwszy procent).Za pomocą tych ostatnich kilku równań po prostu podłączyłem równania do arkusza kalkulacyjnego i ręcznie poprawiałem wartości, aż wyglądały dobrze. Musisz zrobić coś podobnego, jeśli chcesz inną czapkę.
źródło
Dla bardzo prostego rozwiązania, co powiesz na pierwiastek kwadratowy x 2
Pierwiastek kwadratowy z 400 (maks. Możliwe) wynosi 20, 20 * 2 = 40.
źródło
1/2
), a ty nie wyjaśniasz powody, dla których może to być przydatne.