Gravitation mehrere objekte

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Gravitation mehrere objekte



    so meine frage an euch lautet ob ich am bildschirm mehrere planeten erstellen kann wo jeder planet über eigenen gravitations feld verfügt und dementschprechend mit spieler interagiert..
    sowie halt am screen oberhalb.

    danke schon im vorraus..
  • hi,

    ich arbeite zurzeit an einem spiel welches auch mehrere gravitationsfelder hat und benutze dazu folgende Methode:

    ein codeleeres Master object ist der Parent von allen gravitations objecten.
    In jeden object wird im creation code die gravitations stärke und der gravitaitons radius betimmt.
    Der spieler nuddelt jeden Step eine schleife durch, wobei er nach all den instancen die das Master object als parent haben sucht, und somit mit den motion_add code für jeden Planeten die gravitaiton berechnet. Außerdem ist es wichtig das die gravitation, so weiter das object von dem planeten enfernt ist geringer wird (oder näher am radius dran oder wie man es definieren will) allerdings bei 0 aufhört und zwar am punkt wo die weiter des spielers von der des planetens den gravitaionsradius entspricht.
    Dies lässt sich durch eine simple abfrage lösen etwa so: motion = gravitaionsstärke * entfernung / gravitaionsradius. das motion add script darf dann auch nur angewendet werden wenn distance < gravitationsradius, sosnt bekommt man außerhalb des radiuses negative gravitation.

    hoffe ich konnte dir mit dieser idee helfen, code werde ich keinen posten da ich nochvor habe das spiel zu veröffentlichen.

    mfg hellfish
  • ok danke zwar verstehe ich gerademal die hälfte davon aber ja ich kann damit was anfangen^^
    Danke vielmals


    Edit : nööö ist mir doch zu unverständlich... aber die grund idee hab ich kapiert..
    nur die schleife ist mir nicht klar also Motion _add
  • GML-Quellcode

    1. for( i = 1; i <= instance_number( obj_planet_master); i += 1;)
    2. {
    3. var a;
    4. a = instance_find( obj_planet_master, i - 1);
    5. if ( point_distance( x, y, a.x, a.y) <= a.grav_rad)
    6. {
    7. motion_add( point_direction( x, y, a.x, a.y), ((a.grav_rad - point_distance( x, y, a.x, a.y)) / a.grav_rad) * a.grav_str);
    8. }
    9. }


    mach ich mal heut einen auf großzügig.
    grav_rad ist der radius, er muss in dem planeten create event eingestellt werden genau wie grav_str (stärke)
  • Noch eine kleine Anmerkung zu Hellfish's Lösung: Wenn man es realistischer haben will, sollte man ähnlich zu der Formel hier vorgehen: de.wikipedia.org/wiki/Gravitat…nsches_Gravitationsgesetz.
    Bei der Berechnung der Gravitation wird also durch den quadratischen Abstand beider Objekte geteilt. Zudem wirkt immer eine Gravitation, unabhängig davon, wie weit die beiden Objekte voneinander entfernt sind. Mit der Gravitationskonstante, die dort in der Formel auftritt, kann man die Stärke der Anziehung insgesamt noch anpassen wie man es gerne hätte.
  • ok danke.
    Leider bin ich anfänger was gm betrifft oder besser gesagt habe lange pause gemacht.(zuletzt mit gm 4.3 unterwegs).
    Also mir ist klar das es realistischer wird. 1A
    ABER ich habe kein plan wie es gehen soll deswegen habe ich um hilfe gebetten.
    Ich Habe auch keine ahnung wie ich es implementieren Kann.

    Aber trotzdem danke Euch allen.
  • Ich weiss nicht ob das geht!

    Aber, man könnte doch einfach einen Kreis nehmen ganz dünn den rand und der Innenraum transparent. Diesen als Objekt um den Planeten setzen, und so bald dein Objekt z.B. Raumschiff mit dem Feld kollidiert wird es zum Planeten Mittelpunkt ( x,y,) gesendet oder eher gesagt angezogen.