Also Freunde der Sonne,
Gegeben sind : Position des Schultergelenks, Position der Hand, Länge des Oberarms, Länge des Unterarms und sehr schlechte Mathekenntnisse.
Ich möchte also (in 2d, versteht sich) die Positionen und Winkel der Armsegmente berechnen, damit mein Spieler verschiedenste Items/Waffen halten kann ohne das es extrem Schei*e aussieht. Mit einem Arm hab ich das sogar gebastelt bekommen, allerdings mehr schlecht als recht, hinzukommt, dass ich beide Arme haben muss, hält er also eine ump45 dann soll er mit dem anderen Arm weiter vorne an der Waffe greifen. Mit dem Code den ich benutze, kriege ich leider in allen Versuchen die ich angestellt habe einen Fehler da der input zB der arccos Funktion ausserhalb des Wertebereichs liegt. Was sowas angeht bin ich leider der totale Noob.
Wie man letztendlich zum gewünschten Effekt kommt ist mir ziemlich egal, es soll nur Funktionieren.
Alles anzeigen
Also ich wäre für jeden Ansatz und jede Erklärung dankbar, vielleicht kann man meine Dummheit ja noch heilen. Wenn Ich im Internet zum Thema suche beschleicht mich das Gefühl das ich noch eher chinesisch lerne als zu verstehen was da vor mir auf dem Bildschirm steht.
Danke im Vorraus
Gegeben sind : Position des Schultergelenks, Position der Hand, Länge des Oberarms, Länge des Unterarms und sehr schlechte Mathekenntnisse.
Ich möchte also (in 2d, versteht sich) die Positionen und Winkel der Armsegmente berechnen, damit mein Spieler verschiedenste Items/Waffen halten kann ohne das es extrem Schei*e aussieht. Mit einem Arm hab ich das sogar gebastelt bekommen, allerdings mehr schlecht als recht, hinzukommt, dass ich beide Arme haben muss, hält er also eine ump45 dann soll er mit dem anderen Arm weiter vorne an der Waffe greifen. Mit dem Code den ich benutze, kriege ich leider in allen Versuchen die ich angestellt habe einen Fehler da der input zB der arccos Funktion ausserhalb des Wertebereichs liegt. Was sowas angeht bin ich leider der totale Noob.
Wie man letztendlich zum gewünschten Effekt kommt ist mir ziemlich egal, es soll nur Funktionieren.
GML-Quellcode
- bicep_length = (sprite_get_width(bicepSprite) - sprite_get_height(bicepSprite))*drawScale; // length of bicep element
- forearm_length = (sprite_get_width(forearmSprite) - sprite_get_height(forearmSprite))*drawScale; // length of forearm element
- arm_dist = point_distance(armF_x, armF_y, handF_x, handF_y); // distance from shoulder to hand
- phi = arccos((sqr(arm_dist)-sqr(bicep_length)-sqr(forearm_length))/(-2*bicep_length*forearm_length)); // phi
- theta = pi - phi; // theta
- omega = arcsin(forearm_length*sin(phi) / arm_dist); // omega
- bicep_x = armF_x; // bicep xpos
- bicep_y = armF_y; // bicep ypos
- bicep_angle = point_direction(armF_x, armF_y, handF_x, handF_y) - radtodeg(omega); // bicep angle
- forearm_x = armF_x + lengthdir_x(bicep_length, bicep_angle); // forearm xpos
- forearm_y = armF_y + lengthdir_y(bicep_length, bicep_angle); // forearm ypos
- forearm_angle = bicep_angle + radtodeg(theta); // forearm angle
Also ich wäre für jeden Ansatz und jede Erklärung dankbar, vielleicht kann man meine Dummheit ja noch heilen. Wenn Ich im Internet zum Thema suche beschleicht mich das Gefühl das ich noch eher chinesisch lerne als zu verstehen was da vor mir auf dem Bildschirm steht.
Danke im Vorraus
132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code...