Zufälliges wellenförmiges 2D-Terrain inkl. Physics erzeugen

  • GM 8

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

  • Zufälliges wellenförmiges 2D-Terrain inkl. Physics erzeugen

    Hallo,

    nach langer und erfolgloser Suche starte ich nun doch mal einen Thread. Ich bin gerade dabei ein paar Spielideen umzusetzen, um abschätzen zu können welche davon in GMS umsetzbar sind und welche nicht (und welche überhaupt Sinn machen :D ).

    Zum Problem: Ich möchte in GM Studio (1.2) gern ein zufälliges, "unendliches" Terrain erstellen, was aber die Physics-Engine unterstützt. Außerdem sollte die Oberfläche mehr oder weniger auf Sinuskurven basieren, also wellenförmig sein. Das beste Beispiel ist eigentlich Tiny Wings. Der Spieler soll sich bei meiner Idee so ähnlich bewegen können, also sind die physics ein Muss.
    Auch hab ich ein halbwegs passendes Tut gefunden, nur kann ich in GMS irgendwie nichts damit anfangen :D siehe hier

    Kann man hierfür irgendwie sehr schmale Primitives nutzen und die dann wie in dem Tutorial auf Sinuskurvenbasis erzeugen? Und wie bekommt man die Kollisionsmasken für die Physics hin wenn man die Oberflächenform so prozedual erzeugt? Ich bin nicht ganz neu in GMS nur seh ich hier gerade keinen Ansatz... Insofern bin ich froh über Tipps, Ideen, Codeschnipsel oder hilfreiche Links :)

    Beste Grüße
    Phil

    [EDIT1: Für genauere Beschreibung auf was ich hinaus will, siehe mein zweiter Post]
    [EDIT2: Titel angepasst]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Kas_Ka_Gan ()

  • Zuerstmal Willkommen! :)

    Ein unendliches Terrain ist nicht möglich,du meinst wohl ein gigantisches(was aus sicher Millionen Instanzen bestehen soll).

    Gegenfrage,bist du ein Game Maker einsteiger oder Anfänger?
    Wenn ja,dann solltest du erst mal mit kleineren Projekten anfangen und über Performance lernen,also über Surfaces,Datenstrukturen lernen.Denn das eigentliche Problem ist die Performance!
    Mein altes Projekt World of Nake z.B hatte schon Probleme,ein Terrain zu generieren,was über 10 000 Instanzen besitzt!
    Und ein Terrain geht sowieso nicht,wenn man nur Drag&Drop Kenntnisse hat.

    Insofern bin ich froh über Tipps, Ideen, Codeschnipsel oder hilfreiche Links :)


    Dieses Forum macht keinen extra Sourcecode für dich,wie verbessern höchstens die Codes der anderen oder geben ihnen Tipps!
    Außerdem klingt das schon fast nach Copy and Paste.

    Du musst selbst nach Terrain Tutorials googeln,dich selbst durcharbeiten,das alles selbst lernen.
    Darum geht es ja,selbst an ein Spiel arbeiten.
  • Heyho,

    also mir ist schon klar, dass mir das hier niemand coded ;) Deswegen ja mein abschließender Satz, dass ich über jegliche Hilfe froh bin.
    Wie gesagt ich steck hier im Ansatz fest, da ich nicht weiss welche Objekte ich in GMS nutzen kann um so etwas zu erstellen - vorallem in Verbindung mit physics, weswegen ich mir hier einen Gedankenanstoß erhoffe. Ich hab schon verschiedene Spielkonzepte in GMS umgesetzt, auch mit zufällig erzeugtem Inhalt usw. nur bei dem speziellen Beispiel liegt mein Problem bei der Nutzung der Physics in Verbindung mit der wellenförmigen Welt. Bestände diese nur Minecraft-ähnlich aus Quadraten, wüsste ich die Lösung.

    Meine Idee (die ich noch hätte erläutern sollen) soweit ist, dass ich einen Raum von fester Größe habe. Man kann die Spielfigur nicht nach links oder rechts Bewegen, nur deren Rotation beeinflussen und Springen. Die SPielfigur bewegt sich in dem Raum (abhängig vom Boden) also nur nach oben und unten. Das könnte ich ja durch unsichtbare "Wände" rechts und links vom Spieler gewährleisten. Unter dem Spieler wird dann der Boden von rechts nach links bewegt und die zufällig erzeugte Oberflächenstruktur drückt den Spieler dann bspw nach oben. Ich dachte mir, ich kann hier zum "simulieren" der wellenform sehr schmale Primitives nutzen die rechts kurz vorm Eintritt in den Viewport erzeugt werden und links davon, also wenn sie sich aus dem Raum rausbewegen wieder gelöscht werden. Das meinte ich mit "unendlich", also dass die Welt, ähnlich wie bei Tiny Wings, prozedual und zufällig erzeugt wird und im Prinzip ewig weiterlaufen kann, da immer nur die "Bodenobjekte", die im Viewport sind existieren. Ich denke das soltle GMS performance-mäßig hinbekommen oder?

    Also noch einmal konkreter: Kann ich auf diese Art zur Laufzeit, sehr schmale rechteckige Objekte erzeugen, die zusammen eine Wellenform ergeben UND die Physics unterstützen? Ich will wie gesagt erstmal eine Abschätzung ob das überhaupt machbar ist in GMS und vllt Ideen dazu weil ich weder in der GM-Dokumentantion noch sonstwo etwas hilfreiches gefunden habe :)
  • Also da GM Physics keine Konvexen Formen unterstützt, wird das mit den Sinuskurven schwer werden. viele kleine Rechtecke zu benutzen ist extrem ineffizient.

    Dein Ansatz mit; der Spieler bewegt sich nicht (dafür brauchst du auch keine Unsichtbaren Wände) ist schon sehr gut, Du kannst dann durch den Room von Rechts nach links bestimmte vorgefertigte Terrain Stückchen laufen lassen. Außerhalbe des Rooms werden diese zufällig erstellt und bewegen sich dann mit dem Speed den der Player haben soll nach links bis sie dort wieder verschwinden. Daher sollten gleichzeitig vielleicht 5-10 dieser Stücke vorhanden sein und Rechenleistung verbrauchen. Dabei musst du dich nur darum kümmern, dass diese gut aneinander anschließen, Höhe und Neigung der Kurve.

    Du brauchst auch nicht unbedingt physics dazu, denn die kann ja keine konvexen Formen benutzen, sondern du kannst durch die Kollisionsmaske oder einige collision_lines den Kurs deines Spielers anpassen, sodass der sich an die Formen anschmiegt und immer wieder in unterschiedliche kreisbahnen gehoben wird.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Ooooookay, du hast meine Interesse geweckt, das mal auszuprobieren.

    Ich habe nie im Leben mit Path gearbeitet, da ich sowieso nie brauchen werde. Aber komischerweiße habe ich es in 5 Minute hingekriegt, mit Path eine Zufällige Welle zu skripten.

    Ergebnis:



    Es war einfacher als gedacht. Das ganzer kann man mit Surface und Path erstellen.

    Ich habe mal Projekt-Datei angehängt, so das du es mal reinschauen kannst.
    Außerdem, wenn man damit eine Generator machen will, der immer nach links geht, musst du auch beachten, den letze Path-Point immer löschen sollst. Das geht mit path_delete_point. Sonst könnte es nach einiger Zeit Performance-Probleme auftreten.

    Auch die Wellen kannst du so ändern, wie du willst. Das ist eigentlich relativ einfach. Das mit dem Collision habe ich noch kein Plan, aber es geht sicher irgendwie mit Path-Funktionen. Da musst du Path-Experte fragen, ich habe kaum Erfahrung mit Path. :D

    Beachte aber, das es nur schnell programmiert wurde, da ich sinnlos + schnelles mit Surface gearbeitet habe (zu Performance-lastig) bzw. dreckig programmiert wurde. Ich habe nur aus interesse programmiert, ob es soetwas überhaupt geht.

    Den Rest musst du aber selber herausfinden. ;)


    Ich hoffe, das könnte dir ein wenig weiterhelfen.
    Dateien
    Ihr stinkt.
  • Vielen Dank für die Antworten! Ich habe mit beiden Ansätzen schon etwas rumprobiert aber leider etwas wenig Freizeit die letzten Wochen gefunden :D Bei beiden hänge ich gerade noch bei einer vernünftigen Kollisionserkennung und den groben Physik-Eigenschaften aber wenn ich das (halbwegs) hinbekommen hab werd ichs mal posten :)