Ich hab mir gedacht mein Problem passt eher in diesen Thread:
Also, ich versuche so eine Engine hinzubekommen, vergleichbar mit world of goo, oder bridge builder.
Für die die World of goo nicht kennen, in diesem Spiel kann man punkte die der schwerkraft unterliegen miteinander verstreben und somit zbs. einen Turm bauen.
Diese Streben sind aber nicht komplett stabil sondern können sich stauchen und dehnen. Somit kann der Turm also auch umfallen wenn er nicht stabil genug gebaut wurde.
Ein ähnlicher Thread ist auch im Smalltalk Bereich namens "Physic des Flummiballs" , welcher sich mit einem ähnlichen Problem beschäftigt.
Nun zum eigentlichen Problem:
Ich schaffe es zwar das ich die Punkte miteinander verstrebe, und sie sich gegenseitig abstützen, hier ist der code:
var i;
i=0
while i<ds_list_size(anderen)
{
gegner=ds_list_find_value(anderen,i);
dist=point_distance(gegner.x,gegner.y,x,y);
force_add=(dist-ds_list_find_value(laenge,i))/10; <---------die rote zahl ist der wert der die Härte der Streben bestimmt, je kleiner um so härter
richtung=point_direction(x,y,gegner.x,gegner.y);
add_force_direction(h,force_add,richtung,0)
i+=1
}
Allerdings fangen sie mehr und mehr um "zittern" an bis sie schließlich regelrecht auseinander explodieren und quer durch den raum fliegen.
Also hab ich sowas wie friction eingebaut:
richt=get_body_direction(h)
sped=get_body_speed(h)
add_force_direction(h,-sped*0.002,richt,0) //friction
Nun gut jetzt zittert das ganze nicht mehr so, dafür ist die gravity langsamer/schwächer.
Die Gravity ein wenig raufgedreht, dafür sind die punkte jetzt wieder schwerer und die Streben knicken zu schnell ein.
Also die Härte der Streben geändert (siehe im ersten code oben den roten Wert).
Jetzt fängt das ganze wieder an voll zu zittern und zu explodieren.
Das ganze ist also eine Komposition von gravity, Härte der streben, und friction.
Allerdings ist mir noch gänzlich unbekant WARUM die Streben eigentlich anfangen zu zittern und wie man das beheben könnte.
Zur veranschaulichung habe ich noch die gm6 hochgeladen.
Wäre sehr nett wenn ihr euch mit diesem Thema ein bischen auseinandersetzt.
EDIT:
achja genau..in dem example kann man mit linker maustaste punkte setzten und mit der rechten ziehend 2 punkte miteinander verstreben.
Mit dem grünen Pfeil könnt ihr die Physik ein und ausschalten.
Also, ich versuche so eine Engine hinzubekommen, vergleichbar mit world of goo, oder bridge builder.
Für die die World of goo nicht kennen, in diesem Spiel kann man punkte die der schwerkraft unterliegen miteinander verstreben und somit zbs. einen Turm bauen.
Diese Streben sind aber nicht komplett stabil sondern können sich stauchen und dehnen. Somit kann der Turm also auch umfallen wenn er nicht stabil genug gebaut wurde.
Ein ähnlicher Thread ist auch im Smalltalk Bereich namens "Physic des Flummiballs" , welcher sich mit einem ähnlichen Problem beschäftigt.
Nun zum eigentlichen Problem:
Ich schaffe es zwar das ich die Punkte miteinander verstrebe, und sie sich gegenseitig abstützen, hier ist der code:
var i;
i=0
while i<ds_list_size(anderen)
{
gegner=ds_list_find_value(anderen,i);
dist=point_distance(gegner.x,gegner.y,x,y);
force_add=(dist-ds_list_find_value(laenge,i))/10; <---------die rote zahl ist der wert der die Härte der Streben bestimmt, je kleiner um so härter
richtung=point_direction(x,y,gegner.x,gegner.y);
add_force_direction(h,force_add,richtung,0)
i+=1
}
Allerdings fangen sie mehr und mehr um "zittern" an bis sie schließlich regelrecht auseinander explodieren und quer durch den raum fliegen.
Also hab ich sowas wie friction eingebaut:
richt=get_body_direction(h)
sped=get_body_speed(h)
add_force_direction(h,-sped*0.002,richt,0) //friction
Nun gut jetzt zittert das ganze nicht mehr so, dafür ist die gravity langsamer/schwächer.
Die Gravity ein wenig raufgedreht, dafür sind die punkte jetzt wieder schwerer und die Streben knicken zu schnell ein.
Also die Härte der Streben geändert (siehe im ersten code oben den roten Wert).
Jetzt fängt das ganze wieder an voll zu zittern und zu explodieren.
Das ganze ist also eine Komposition von gravity, Härte der streben, und friction.
Allerdings ist mir noch gänzlich unbekant WARUM die Streben eigentlich anfangen zu zittern und wie man das beheben könnte.
Zur veranschaulichung habe ich noch die gm6 hochgeladen.
Wäre sehr nett wenn ihr euch mit diesem Thema ein bischen auseinandersetzt.
EDIT:
achja genau..in dem example kann man mit linker maustaste punkte setzten und mit der rechten ziehend 2 punkte miteinander verstreben.
Mit dem grünen Pfeil könnt ihr die Physik ein und ausschalten.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von domi ()