Wirbelsäule/Kette Simulieren (Physik)

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

    • Wirbelsäule/Kette Simulieren (Physik)

      Joho,
      ich möchte eine Kette bzw. Wirbelsäule simulieren. Diese ist der Schwerkraft ausgesetzt und jedes Kettenglied/jeder Wirbel beseitzt ein anderes Gewicht. Soweit habe ich es schon geschafft, allerdings (wahrscheinlich) nicht auf die effizienteste Art und Weise.
      Dabei bin ich so vorgegangen:
      Schritt 1: Die Kettenglieder/Wirbel bewegen sich unabhängig voneinander um ihre jeweilige eigene Geschwindigkeit und die Schwerkraft wirkt auf sie
      Schritt 2: Die Kettenglieder/Wirgel werden nun nacheinander durchgegangen. Dabei werden sie, abhängig ihres Gewichts (schwere lassen sich von leichten nicht stark beeinflussen), aufeinander zubewegt
      Schritt 3: Dies geschieht so oft, bis die Kette/Wirbelsäule einmal durchgegangen werden kann, ohne das ein Abstand zwischen zwei Kettengliedern/Wirbeln zu groß ist
      Schritt 4: Geschwindigkeiten werden angepasst

      Dies klappt bisher wie es soll, nur darf die Kette/Wirbelsäule nicht zu lang sein, sonst muss ich Sekunden pro Bild zählen. Von mir angestrebt ist eine Länge von ~80 Gliedern und ausreichend Rechenleistung für andere Inhalte des Spiels.
      Der von mir beschriebene Weg simuliert eine Kette. Diese Möchte ich aber so erweitern können, dass daraus auch eine Wirbelsäule werden kann. Dies bedeutet, dass es auch einen minimalen Abstand geben muss, Bewegungswinkel usw.. Wahrscheinlich bekomme ich das auch hin, nur soll es nicht so stark an der Rechenleistung zerren, wie es dies momentan tut.

      Ich habe bereits, ohne Erfolg, versucht eine Formel zu schreiben, welche alle Kettenglieder annähernd in die richtige Position bringt, damit die Schleife anschließen nicht so oft durchlaufen muss. Weitere Ansätze, bis auf eine effizientere Schleife, sind mir bis jetzt nicht eingefallen.

      Freue mich über Hilfe!


      Skotchy~
      "Ich sollte schlafen gehen"

      ~Pika-Pika~
    • Ich nehmen mal an, die Kettenglieder sind alle einzelne Objekte? Dann könnte man es doch so machen, dass jedes Kettenglied unabhängig vom Rest einfach immer nur die beiden Nachbarn betrachtet und daraus dann die eigene Geschwindigkeit anpasst. Performancemässig wäre das kein Problem. So würde ich das jetzt spontan machen, wenn ich deine Problematik richtig verstanden haben.
    • Bei der Wirbelsäule würde es sich um einzelne Objekte handeln, bei der Kette sind es nur Koordinaten, welche als Punkt gezeichnet werden. Wenn ich dich nun aber richtig verstanden habe, dann beschreibst du das oben genannte Vorgehen. Das Problem dabei ist, dass die Ketteglieder nicht an ihrer Position sind, wenn die Schleife nur einmal durchläuft.
      Bildlich: Kettenglieder eins bis drei haben den richtigen Abstand zueinander, Kettenglieder drei und vier sind zu weit voneinaner entfernt. Wenn die Schleife nun nur einmal abläuft, dann kann es passieren, dass der Abstand zwischen drei und vier richtig ist, der zwischen zwei und drei aber nicht mehr.
      Ich könnte den Prototypen der Kette hochladen, falls ich mein Problem nicht ganz verständlich erklärt habe.
      "Ich sollte schlafen gehen"

      ~Pika-Pika~
    • Ich dachte, dein Problem ist, dass die Performance in die Knie geht, weil alles ständig durchlaufen und angepasst werden muss, und jede Änderung ja wieder einen neuen Durchlauf benötigt, in dem alles wieder überprüft werden muss.

      Meine Idee war ja, dass es keine Schleife gibt, die durchlaufen wird, sondern dass jedes Glied in jedem Step einfach immer nur prüft, wie es zu den direkten Nachbaren liegt. Ich weiss nicht, ob das schon ausreichen/funktionieren würde, das müsste man halt ausprobieren. Aber von der Performance her sollte das keine Pronleme machen.
    • Ich denke so einen Ansatz hatte ich zu Anfang. Das Problem dabei wäre, dass die Kettenglieder auch unterschiedliche Gewichter haben. Dies bedeutet, dass sie unterschiedlich schnell fallen und so andere, oder sogar alle, Kettenglieder mitbeeinflussen können. Dadurch stimmen am Ende die Entfernungen zwischen den Gliedern nicht - zumindest bei mir. Entweder gibt es dafür eine super Formel, oder ich muss eine effizientere Schleife basteln.
      "Ich sollte schlafen gehen"

      ~Pika-Pika~
    • habe mich da noch nicht allzusehr mit befasst, aber was wäre denn wenn du physics einschaltest. Mir ist da grade folgendes in den Sinn gekommen, das sollte doch genau erledigen was du haben willst :

      GML-Quellcode

      1. physics_joint_distance_create(inst1, inst2, w_anchor1_x, w_anchor1_y, w_anchor2_x, w_anchor2_y, col)


      Nach meinem Verständnis kannst du damit jeweils zwei der Objekte aneinander ketten mit gegebenem Abstand. Das sollte recht performant sein, wenn selbst das zu framerate Einbrüchen führt solltest du dein Vorhaben überdenken da die internen Funktionen schon recht flott sind.

      Sag mal bitte obs klappt!
      132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    • Skotchy schrieb:

      Wenn ich die Physics einschalte, dann kann ich mein Objekt doch nicht mehr bequem mit "x" und "y" an beliebige Punkte setzen, oder?


      Eigentlich schon, jedoch werden sofort wieder physics applied und die Instanz wird sich wieder bewegen.
      Du kannst das aber temporär ausstellen, mit phy_active oder so, hab grad kein Studio zum testen da.
      Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
    • Hi kanst du mal so eine kette als downlad freigeben -.-

      Hört sich echt cool an !
      Mein Game und meine seite: riataliaxeas.npage.de/

      Spoiler anzeigen
      Zeit zurückspulen, Tag-/Nacht-System, Begleiter mit Boni, Shop, Dungeon und Licht-/Schatteneffekte, 3D-Fake-Natur und mehr...Termin: Mitte 2016
      :!: