Thema: Nötige Jump-Physical errechnen Mo Jan 03, 2011 5:39 pm
Wieder mal steht ein Problem vor der Tür. Ein Clonk soll per Script bis zu einem gewissen Punkt springen, unabhängig von seinem momentanen Standort. Allerdings liegt der Punkt ziemlich weit oben(also er soll bis an eine Wand hoch springen und dort dann beginnen zu hangeln) und seine Jump-Physical ist nicht groß genug. Wie kann ich nun errechnen, wie groß sie sein muss, dass er von seinem Standort aus etwa zum Punkt (100/-300 ) springt?
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Nötige Jump-Physical errechnen Mo Jan 03, 2011 6:07 pm
Hm.. Müsstest erstmal sowas wie die Parablerfunktion f(x) rausfinden und wie sie in Abhängigkeit von der Jump-Physical steckt also sowas wie f(x)=-x²+??, aber von Mathe hab ich dad eher weniger Ahnung.. Und ob bei Clonks Physicengine Mathematische Formeln helfen, sei auch mal dahingestellt. Das besste wäre, wenn du mal die Sprungfunktion untersuchen würdest, da ist bestimmt i-eine Parabelfunktion drinne.
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Nötige Jump-Physical errechnen Mo Jan 03, 2011 6:17 pm
Hier gings um ein ähnliches Problem - besonders leicht ist das nicht^^
Als erstes reichts, sich auf die Jump-Physical und den zu bewältigenden Y-Unterschied zu beschränken. Dann solltest du noch festlegen, wo der Clonk den Punkt erreichen soll - am besten ist es, einfach am Höhepunkt. Das ist am leichtesten, wenn der Punkt über dem Clonk liegt. Liegt er ca auf gleicher Höhe oder tiefer, wirds hackig. Dann brauchst du noch die Schwerkraft. Ohne Schwerkraft wirds leicht, da springt der Clonk gerade und die Physical kann dir egal sein, nur das Verhältnis von Walk zu Jump muss stimmen.
Also, du errechnest zuerst die Y-Differenz (y). Die Gravitation sei g. Die zu suchende Jump-Physical nennen wir j, bzw erstmal errechnen wir die Start-Y-Dir, yd.
Nun muss die Strecke y in f Frames mit der Startgeschwindgkeit yd zurückgelegt werden. Da der Hochpunkt gesucht werden soll (also da, wo der Clonk wieder runterkommt), lässt sich f leicht ausrechnen, nämlich Startgeschwindigkeit / Schwerkraft.
Zwischenbemerkung: Eh... versteht eh keiner.
Der Hochpunkt ist da, wo yd 0 wird. Nochmal kurz: g = 2 * GetGravity() yd: Präzision 1000 Die Funktion, die yd zum Zeitpunkt f beschreibt, wäre yd(f) = yd(0) - f * g. Die Y-Position wäre dann das ganze Zeug aufgeleitet, also y(f) = f * yd(0) - f² * g / 2.
Meine Gedanken... weiß iwie nicht mehr weiter, hab mich irgendwo aufgehängt xD Jedenfalls: Ist schwer zu berechnen :/
Edit: Irgendwie komm ich als Parabelfunktion auf y/(f² - 2f) * (x² - 2x) Ableitung: y/(f² - 2f) * (2x - 2) << die müsste 0 werden, glaub ich Vllt hilfts irgendwie weiter xD
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Nötige Jump-Physical errechnen Di Jan 04, 2011 5:33 pm
So, ich glaub, ich habs. Funktioniert mit normalen Clonk und Gravity 100 sehr gut, führt aber mitunter zu seltsam hohen Sprüngen, da ich die Walk-Physical konstant gehalten hab... wär sonst ziemlich schwer
Zitat :
global func TestJump(int iX, int iY, object pObj) { if (!pObj && !(pObj = this)) return;
var Prec = 1000, x = (iX - GetX(pObj)) * Prec, y = (iY - GetY(pObj)) * Prec, g = -GetGravity() * 2 * Prec / 1000, xd = GetPhysical("Walk", PHYS_Current, pObj) * 28 * Prec / 1000000, t = Abs(x / xd), yd = Prec * t * g / 2 + Prec * y / t, j = Abs(yd * 10 / Prec); SetPhysical("Jump", j, PHYS_Temporary, pObj); SetDir(iX > GetX(pObj), pObj); pObj->Jump(); }
Bowserkoopa Staatsrat
Alter : 30 Anmeldedatum : 21.12.08
Thema: Re: Nötige Jump-Physical errechnen Do Jan 06, 2011 8:42 pm
Na sowas, ich hätt schwören können ich hätte schon geantwortet? o.0 Na gut, dann eben nochmal: Als ich deinen vorherigen Post zum ersten mal gelesen hab, dacht ich mir erst: Scheinbar ne Stufe zu hoch für mich, gut, dann kriegt der Clonk eben eine Funktion weniger^^
Tja, und ich dachte die Ableitungsfunktion brauch ich nie im Leben o.0 Man wird eben doch immer wieder überrascht. Ich kann die Funktion eigentlich ziemlich gut nachverfolgen. Differenz zwischen aktueller Position und Zielposition, dann entgegen der Schwerkraft wirken, aber beim Walk-Physical berechnen weiß ich nicht wozu die mal 28 gerechnet wird. Trotzdem ziemlich derbe Mathematikfolter >.<
Jedenfalls funktioniert alles, seltsam hohe Sprünge konnte ich eigentlich nicht feststellen, also hast dich sogar selbst übertroffen
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Nötige Jump-Physical errechnen Do Jan 06, 2011 9:35 pm
Zitat :
aber beim Walk-Physical berechnen weiß ich nicht wozu die mal 28 gerechnet wird.
Ist zur Berechnung der X-Geschwindigkeit aus der Walk-Physical.
Zitat :
GetPhysical("Walk") * 28 / 1000000 Pixel/Frame wimni. Der normale Clonk (Walk 70k) erreicht damit ca 1,96 Pixel pro Frame Laufgeschwindigkeit.
Gravitationsbeschleunigung ist GetGravity() * 0.002 Pixel / Frame². Bei Standard-Schwerkraft (100) erfährt ein Objekt eine Beschleunigung von 0.2 Pixel/Frame².
Sprungkraft weiß ich grad nicht, müsste man aber mit etwas Probieren auch rauskriegen.