Problem
Der Spieler erhält 5 Punkte pro Level bis zu Level 80 mit einem Maximum von 400. Es gibt 5 Statistiken, auf die verteilt werden kann, und keine Obergrenze, wie viel Sie zu einer Statistik hinzufügen können.
- Stärke
- Ausdauer
- Intelligenz
- Beweglichkeit
- Glück - Gewährt kritische Chance und kritischen Schaden
Ich würde gerne eine abnehmende Renditegleichung auf Lass uns Glück sagen implementieren. Bei einem kritischen Treffer möchte ich nicht, dass der Spieler einen kritischen Treffer von 100% erzielt.
Es wird eine Obergrenze geben, die erreicht wird, wenn das zunehmend abnehmende Wachstum gegen 0 je hinzugefügten Punkt geht.
Beispiel: Wenn die maximale kritische Chance, die der Spieler haben soll, 40% beträgt, erhöht jeder Glückspunkt die kritische Chance immer weniger, bis die kritische Chance etwa 40% erreicht. Womit 1 Glück eine sehr sehr winzige Menge ergibt.
Irgendwelche Lösungen? Vielen Dank und Ihre Hilfe wird sehr geschätzt!
Antworten:
Sie möchten mit einer asymptotischen Funktion beginnen. Das heißt, einer, der bei einer Zahl beginnt
a
und sich einer anderen Zahl nähertb
, diese aber nie erreicht. Es wird wahrscheinlich am einfachsten sein, wenna = 0
undb = 1
. Sie nehmen diese Gleichung, geben die Anzahl der Statistikpunkte (Glückspunkte) des Charakters ein und erhalten den tatsächlichen Statistikwert (Crit Chance) als Ausgabe.Ein sehr einfaches Beispiel ist,
y = x / (x + n)
won
eine positive Konstante ist. Hierx
ist Ihre Eingabe, bei der Sie die Anzahl der Statistikpunkte eingeben, undy
Ihre Ausgabe, bei der Sie den endgültigen Statistikwert erhalten.Um
n = 5
herauszufinden, wie es aussieht:Wenn du fütterst
x = 0
, bekommst du esy = 0
, aber egal wie großx
du hineingesteckt hast, erreichst duy
nie ganz 1. Perfekt.Jetzt können Sie dies auf Ihren Herzenswunsch abstimmen. Sie können mit einem Skalierungsfaktor multiplizieren, um die Obergrenze auf das zu setzen, was Sie möchten.
y = a * x / (x + 5)
. Wenn die Obergrenze 40% betragen soll, multiplizieren Sie sie mit 0,4.y = .4 * x / (x + n)
. Jetzt, wenn Sie inx
's füttern ,y
wird sich erhöhen, aber es wird nie ganz .4 erreichen.Stellen Sie ein
n
, wie schnell oder langsam die Gleichung ansteigt.n = 100
wird viel langsamer zunehmen alsn = 5
:Sie können diese Gleichung lösen,
n
wenn Sie wissen, dass Sie den gewünschten Statistikwert an einer bestimmten Anzahl von Statistikpunkten erreichen möchten. Nehmen wir an, der Charakter sollte bei 100 Glückspunkten eine Chance von 35% auf kritische Treffer haben. Die Lösung.35 = .4 * 100 / (100 + n)
für dien
Renditenn = 14.29
.Diese Zahlen müssen auch keine Rohkonstanten sein. Vielleicht gehen andere Statistiken in die Berechnung der Werte von
n
. Möglicherweise haben einige Charaktere unterschiedlichen
Werte, so dass sie in ihrem bevorzugten Wert besser skalieren können.Wenn Sie eine Kurve wünschen, die anders geformt oder komplexer ist, gibt es viele andere Beispiele für asymptotische Funktionen, die Sie ebenfalls verwenden können. Ich überlasse es Ihnen, das zu erkunden, wie Sie es wünschen.
quelle
P = x/(x+n)
ist die Wahrscheinlichkeit, mit der Sie bei einer Tüte mit n schwarzen und x weißen Steinen einen weißen Stein aus der Tüte ziehen. Ein Ansatz, den Sie tun können, besteht darin, Crits auf X = Ihr Glück und N = ihr Glück zu setzen. Ihre Chance auf Kritik beträgt dann 50%, wenn Sie dasselbe Glück wie Ihr Gegner haben. Wenn Sie möchten, dass die Grundchance 10% beträgt, dann sind wir X = Ihr Glück, N = 9x ihr Glück.Eine gute Basis wäre eine Funktion wie
arctan
, da sie den Ursprung durchläuft und eine horizontale Asymptote aufweist.Skaliere es nach
40 / (pi/2)
oder80/pi
für dein gewünschtes Limit. Dann transformierenluck
, um die gewünschte Kurvensteilheit zu erhalten.quelle
Mir gefällt die Art und Weise, wie die Souls-Spiele dieses Problem angehen. Anstatt dass jede Statistik Boni basierend auf einer kontinuierlichen Funktion gibt, wie vorgeschlagen wurde, gibt es Boni in einer stückweise linearen Funktion.
Ich kann mich nicht an die exakten Zahlen auf meinem Kopf erinnern, aber die Funktionen sind wie folgt (jeder Wert hat seine eigenen Konstanten)
Diese Methode bietet dem Designer und dem Spieler viele Vorteile. Der Designer profitiert, da Sie den genauen Nutzen pro Punkt in einer Fertigkeit ziemlich trivial einstellen können, und der Spieler profitiert, da er genau weiß, wie viel Nutzen er von Stufe zu Stufe sehen wird.
Im Fall einer kontinuierlichen Funktion bieten einige Pegel möglicherweise einen Vorteil, der sich aufgrund von Mess-Aliasing nicht in den Zahlen widerspiegelt. Sicher, dieses letzte Level hat zu einer Erhöhung des Bonus XYZ um 0,9 geführt, aber seit der tatsächliche Wert von 23,52 auf 24,42 gestiegen ist und Sie die Zahl vor der Anzeige gerundet haben, merkt der Spieler nicht, dass sich etwas geändert hat.
Aus UX-Sicht würde ich definitiv vorschlagen, eine stückweise lineare Funktion zu verwenden. Die Verwendung einer kontinuierlichen Funktion kann jedoch später einfacher sein, da die Spieler nicht so an runde Konstanten gebunden sind.
quelle
ceil
den Betrag vor dem Hinzufügen zu erhöhen und nur ganzzahlige Statistikstufen zuzulassen. oderfloor
dannx <= 0: x = 1
zu vermeiden , versehentlich die weiche Kappe gehen über.Jan Dvorak weist in einem Kommentar auf die Exponentialfunktion hin. Ich erkläre es hier.
Beachten Sie, dass Exponential- (und Trigger-) Operationen erheblich rechenintensiver sind als Quadratwurzeloperationen, die selbst weitaus schlechter sind als die Grundrechenarten. Wenn Sie diese Berechnungen also mehrmals pro Sekunde ausführen, sind Sie wahrscheinlich besser mit Adams Ansatz vertraut . Wenn Sie nur die Werte berechnen, wenn der Spieler das Level erreicht, die Ausrüstung ändert usw., ist die Geschwindigkeit nicht wichtig. Verwenden Sie also, was Ihnen die beste Kurve gibt.
Eine Exponentialfunktion ist einige Base, B , bis zu einem gewissen Leistung, x ,
y=B^x
. Mathematiker verwenden gewöhnlich eine Basis von e (~ = 2.718), aber es gibt keinen Grund, warum Sie 2 oder 10 nicht verwenden können, wenn Sie es vorziehen.y=e^x
sieht aus wie das:Beachten Sie die linke Seite bewegt asympotically auf 0 , so dass wir die x-Achse , indem Sie drehen können
y=e^(
-x)
, aber es ist absteigend nach wie vor von 1 auf 0 , und wir wollen es aufzusteigen. Also können wir es mity=
- um die y-Achse drehene^(-x)
. Jetzt steigt es von -1 nach 0 auf. Wir können 1 addieren, umy=
1 zu erhalten,- e^(-x)
und es steigt von 0 nach 1 auf.Von hier aus geht es nur noch darum, es vertikal und horizontal zu skalieren. Wir können das Ganze mit einem Wert multiplizieren, nennen wir es A , der die asymptotische Grenze setzt. Dann können wir x mit einem Wert für die Änderungsrate k multiplizieren , um anzupassen, wie schnell das Limit erreicht wird.
Dies gibt uns eine endgültige Gleichung von
y=A*(1 - e^(-k*x))
. Mit den Werten vonk=0.012
undA=0.5
können wir den Grenzwert auf 50% setzen und ihn ungefähr an diesen Grenzwert annähernx=400
.Jetzt können Sie einige Änderungen daran vornehmen. Eine von mir vorgenommene
A=0.5041
Optimierung wurde auf geändert. Wenn wir also auf einen Prozentsatz mit 2 Dezimalstellen (wie 32,23%) runden, ist y (399) = 49,99% und y (400) = 50,00%. Ab y (347) gibt es mehrere Stellen, an denen zwei Punkte erforderlich sind, um eine Änderung von 0,01% zu erzielen. Aber dieser letztmögliche Punkt bringt immer noch einen (kaum) greifbaren Vorteil und bringt ihn auf gerade 50%.Alternativ könnten wir den
k
Wert optimieren , um einen ähnlichen Effekt zu erzielen. Aufk=0.02305
die Wert Runden zu 49,99% aufy=399
50,00% any=400
. Dies hat jedoch das Problem, dass die Grafik am Ende sehr flach ist - es werden 48 Punkte benötigt, um das letzte Hundertstel Prozent (vony(352)=49.99%
bisy(399)=49.99%
bisy(400)=50.00%
) zu erhalten, und die letzte 1% -kritische Chance benötigt satte 230 Punkte (vony(170)=49.01%
bisy(400)=50.00%
). Das ist wahrscheinlich ein bisschen zu nachlassend für die Rendite.Wenn Sie möchten, können Sie sowohl A als auch k so einstellen, dass sie langsamer auf einen etwas höheren Grenzwert abfallen, um einen Wert zwischen linearem und exponentiellem Abfall zu erhalten. Dabei erhalten Sie Folgendes
y=0.6*(1-e^(-0.00447*x))
:Beachten Sie, dass die Kurve nach 50% fortgesetzt wird, aber da es ein hartes Limit von 400 gibt, kann der Spieler diesen Punkt nicht überschreiten (und wenn er es schafft, gibt es immer noch ein hartes Limit von 60% krit.). Mit dieser Gleichung können Sie 1 Dezimalstelle verwenden und trotzdem alle 2 bis 3 Punkte Gewinne sehen, mit einem abschließenden Häkchen von
y(399)=49.9%
bisy(400)=50.0%
.Mathematisch gesehen scheinen die früheren Gleichungen vielleicht besser zu sein, da sie sich tatsächlich 50% nähern, aber ich persönlich denke, dass sich Gewinne von 0,1% alle paar Punkte besser anfühlen als Gewinne von 0,01%. Sogar mit
A=0.05041
undk=0.012
sind 102 Punkte nötig, um vony(298)=49.00%
zu zu gelangeny(400)=50.00%
. 25% Ihrer Punkteausgaben für 2% Ihrer Kritikpunkte sind wahrscheinlich zu gering. Die 60% -Gleichung nimmt nur 20 Punkte für das letzte Prozent an (was immer noch 5-mal höher ist als die 4 Punkte, die für das erste Prozent benötigt werden).Mit diesen letzten Gleichungen habe ich die Gleichungen einfach in eine Tabelle eingefügt und die Werte manuell angepasst, bis sie gut ausgesehen haben. Sie müssten etwas Ähnliches tun, wenn Sie eine andere Kappe wollten.
quelle
Wie wäre es mit Quadratwurzel x 2 für eine sehr einfache Lösung?
Die Quadratwurzel von 400 (maximal möglich) ist 20, 20 * 2 = 40.
quelle
1/2
), und Sie erklären das nicht Gründe, warum dies nützlich sein könnte.