Ich entwickle ein Spiel in Flash und brauche ein wenig Hilfe. Es kann als mathematisches Problem angesehen werden.
Mein Objekt fliegt mit Geschwindigkeit X
und mein Objekt kann mit Steinen kollidieren. Wenn es mit einem Stein kollidiert, muss mein Objekt den Stein brechen und fortfahren, aber mit geringerer Geschwindigkeit. Es ist einfach, es fest zu codieren und so etwas wie: zu schreiben myVelocity -= 10;
, aber mein Hauptproblem ist, dass ich möchte, dass es weniger Geschwindigkeit verliert, je höher die Anfangsgeschwindigkeit ist.
Zum Beispiel: Wenn die Geschwindigkeit 300 ist, möchte ich, dass sie 10 verliert, und wenn es 200 war, möchte ich, dass sie 20 verliert.
Kann das mit einer Formel gemacht werden?
mathematics
physics
Afra
quelle
quelle
log(myVelocity + 1) * N
?Antworten:
Ich würde die Geschwindigkeit umkehren und mit etwas multiplizieren, das Ihnen gefällt:
Dieses Beispiel zeigt folgende Effekte:
quelle
Das System, das Sie und andere beschreiben, erzeugt keine wirklich aussehende Physik. Die Hauptformel besteht darin, 0,5 * m * v ^ 2 (kinematische Energie) um einen konstanten Wert zu verringern, wenn ein Objekt irgendwo aufschlägt.
Wenn also ein Objekt mit einem Gewicht von 2 kg auf einen Block trifft, der 16 j Energie benötigt, bevor er bricht, ändert sich die Bewegungsgeschwindigkeit des Objekts gemäß dieser Tabelle:
quelle
Sie haben nicht wirklich genug Informationen angegeben, um zu sagen, welche Art von Bereich Sie möchten, dh ob er begrenzt ist, ob Sie einen geometrischen Verlauf wünschen usw.
Als erstes möchten Sie eine Zahl ableiten, die proportional zur Geschwindigkeit ist, die Sie verlieren möchten (sie muss nicht gleich sein, sollte jedoch mit zunehmender Geschwindigkeit abnehmen, um sie proportional zu Ihrem Verlust zu machen). Der Standardweg, dies zu tun, ist das Gegenteil :
Jetzt haben Sie für 100 0,01, für 200 0,005, für 300 0,0033 und so weiter.
Jetzt müssen Sie diese Zahl nur noch an das anpassen, was Sie wirklich wollen, indem Sie sie multiplizieren. So
Sie erhalten 20 für 300, aber 15 für 200 statt 10. Dies kann für Sie in Ordnung sein. In diesem Fall müssen Sie nicht weiter lesen. Sie können k nach Belieben anpassen, aber Sie erhalten möglicherweise keine Zahlen, wie Sie sie mögen, es sei denn, Sie tun etwas mehr, z. B. implementieren Sie eine geometrische Progression oder ändern Sie die Basis für die Erhöhung. Ich werde hier nicht auf geometrische Progressionen eingehen, aber wenn Sie die Basis ändern möchten, gehen Sie wie folgt vor:
Dadurch erhalten Sie den Bereich, nach dem Sie ursprünglich in Ihrer Frage gefragt haben: 300 -> Verlust von 10, 200 -> Verlust von 20. FYI 100 -> Verlust von 40 und 50 -> Verlust von 80 (!), Was bedeutet, dass Sie Ich müsste Ihre Subtraktion einschränken - was ich in den Zeilen (1) und (2) getan habe.
Es gibt natürlich auch andere Möglichkeiten, dieses ganze Problem anzugehen, und ich bin sicher, dass diejenigen, die mathematisch versierter sind als ich, hier posten werden.
quelle
Ich denke, Sie können nur eine einfache Division durch die Geschwindigkeit verwenden. Zum Beispiel: verloren = 3 000 / myVelocity. Wenn die Geschwindigkeit 300 beträgt, verlieren Sie 10, wenn es 200 ist, verlieren Sie 15. Es liegt an Ihnen, die richtigen Konstanten zu wählen.
Wenn Sie möchten, können Sie eine komplexere Formel verwenden, wie: Konstante / (Konstante2 * Geschwindigkeit ^ 2 + Konstante3 * Geschwindigkeit). Wieder - wählen Sie einfach Konstanten, die zu Ihnen passen.
quelle