Der Umstieg von D&D zu GML mit GameMakerLite, ein simpler top down bot

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

    • Der Umstieg von D&D zu GML mit GameMakerLite, ein simpler top down bot

      Tutorial, der Umstieg von D&D zu GML mit GameMakerLite

      Ein simpler topdown bot

      Durch zufall ist dieses tut entstanden, damit es aber nicht auf meinem PC rumgammelt, habe ich es hier reingestellt.


      Du wirst wenn du dir mal einen GML Code anschaust sehr schnell viele Sachen wiedererkennen, die du aus D&D kennst.

      Im anhang ist ein zip archiv mit einem example als .gmk und eine .pdf datei.

      Dieses tut gibt es auch als Internetseite

      Ich werde mal versuchen zu erklären was ich da gemacht habe:


      Der Gegner hat im create Event ein Code:

      var_waypointxxx=floor(random(5))

      Was der Macht hat man schnell erklärt:
      wenn du eine neue variable einrichten willst, musst du sie im create Event definieren (muss nicht var_waypoint heißen, sondern alles was dir sonst so einfällt , außer zahlen), wenn du die variable erst später erstellen willst, var waypoint; schreiben, das erstellt ebenfalls die variable.

      Also floor() rundet das was in den klammern ist ab. Du könnest auch round() benutzen, das rundet dann auf. Was random() macht erklärt sich schon fasst von selbst: Es erstellt eine zahlt, zwischen 0 und 5.

      So, jetzt haben wir eine variable, var_waypointxxx, die einen wert zwischen 0 und 4 hat (nicht 5 wegen der floor Sache).

      Im stepevent machen wir dann das der Gegner sich bewegt. Und das realistisch:

      GML-Quellcode

      1. if(var_waypointxxx=1) // wenn die variable var_waypoint 1 ist, dann macht er folgendes {
      2. mp_potential_step(obj_waypoint1.x,obj_waypoint1.y,3,true)// läuft zu waypoint1 (da haben wir die mp_potential step funktion wieder)
      3. if (x=obj_waypoint1.x && y=obj_waypoint1.y) // dann haben wir noch ein if im if, der herausfindet ob x an obj_waypoints x ist und das selbe mit y
      4. {
      5. var_waypointxxx=floor(random(5)) // wenn das der Fall ist, dann wird die variable var_waypoint neu generiert
      6. }
      7. }



      Also, die Funktion des if kennst du aus dem D&D dort sieht es so aus:

      und im GML so:

      GML-Quellcode

      1. if (var_wapoint=1)
      2. {
      3. macht irgendwas
      4. }



      du kannst auch mehrere Sachen als nur var_waypoint=1 hinschreiben, das sieht dann so aus:

      GML-Quellcode

      1. if (var1=1 && var2=1)
      2. {
      3. macht irgendwas
      4. }



      Hier bedeutet das && "und". Es gibt dann auch noch ||, das bedeutet "oder". Damit keiner schimpft, ja, es gibt auch noch ^^, aber das brauchen wir noch nicht.
      Wenn man jetzt eine variable von einem anderen Objekt herausfinden will, muss man auch noch dessen Namen davor schreiben. Also, wenn wir die variable var1 von obj_spieler herausfinden wollen, müssen wir folgendes schreiben: obj_spieler.var1
      Wenn es das Objekt obj_spieler mehrmals gibt, ist obj_spieler.var1 von dem Objekt das zu erst da war.

      In einem if Statement (so heißt das) kann man nicht nur variablen testen, sondern auch gleich die Funktion. Z.B:

      GML-Quellcode

      1. If (distance_to_obj(obj_gegner)<100)
      2. {
      3. macht irgendwas
      4. }



      Also, wenn der Abstand zwischen dem Objekt in dem der Code ist, und den obj_gegner kleiner ist als 100, dann macht er irgendwas, z.b. schießt.

      Wenn wir dann im Beispiel die if Sachen durchhaben, stoßen wir auf den Code:


      image_speed=0
      image_index=direction/image_number


      Was der macht ist einfach. image_speed ist eine vorgefertigte variable, die die geschwindichkeit der Animation bestimmt. Wir setzten dies auf null.

      Image_index ist ebenfalls eine vorgefertigte variable, die bestimmt welches der Frames die die Animation hat gezeigt wird.

      Direction ist auch eine vorgefertigte variable, die wir hier durch image number (auch eine vorgefertigte variable) teilen, um immer den richten image_index im Verhältnis zur Fahrtrichtung zu haben. Damit das funktioniert muss dein Sprite ungefähr so aussehen:

      Was wir jetzt gemacht haben:
      Wir haben durch random einen zufälliges obj_waypoint ausgesucht, dessen x und y Koordinaten herausgefunden, sind dort hin gelaufen, und haben das Sprite richtig gedreht.

      Natürlich befasst sich GML mit viel mehr Sachen. Wenn mal probleme sind, dann ist alles sehr detailiert in der Hilfe beschreiben.

      Viel spaß
      Dateien
      • Tut.zip

        (265,85 kB, 276 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von SDX ()

    • Gutes Tutorial, finde ich. :)
      Hast du gut erklärt mit den Bildern.

      Mfg
      Das Problem zu erkennen ist wichtiger,
      als die Lösung zu erkennen,
      denn die genaue Darstellung des Problems führt zur Lösung.
      ( Albert Einstein )


      I am an according to the gml n00b test!
    • Wie gesagt, es war eigentlich nicht als tut gedacht, aber weil es scho schön war habe ich es hier reingestellt. Ja, das mit dem dass manche Zeilen nicht richtig eingerückt sind ist mir bewusst, doch mir zu spät aufgefallen. Doch jetzt würde es ein heiden arbeit bedeuten die PDF noch mal zu machen. Und ich glaube es würde noch mehr irritiern wenn es hier im forum anders ist als in der PDF ausgabe. Es funktioniert, es ist bloß nicht so schön anzusehen. Außerdem ist mir der fehler nur in den simplen codes unterlaufen.
      if (var_wapoint=1)
      {
      macht irgendwas
      }

      Das ist nicht so schlimm als wenn mir der fehler in den etwas mehr komplexen codes unterlaufen wäre!

      :P
    • SDX schrieb:

      Das ist nicht so schlimm als wenn mir der fehler in den etwas mehr komplexen codes unterlaufen wäre!
      Naja, es ist auch ein Einrückfehler im Komplexeren Code:

      GML-Quellcode

      1. if(var_waypointxxx=1) // wenn die variable var_waypoint 1 ist, dann macht er folgendes {
      2. Das hier müsste auch eingerückt werden: mp_potential_step(obj_waypoint1.x,obj_waypoint1.y,3,true)// läuft zu waypoint1 (da haben wir die mp_potential step funktion wieder)
      3. if (x=obj_waypoint1.x && y=obj_waypoint1.y) // dann haben wir noch ein if im if, der herausfindet ob x an obj_waypoints x ist und das selbe mit y
      4. {
      5. var_waypointxxx=floor(random(5)) // wenn das der Fall ist, dann wird die variable var_waypoint neu generiert
      6. }
      7. }


      Ist aber nicht schlimm!

      (Korrekt wäre es so:)

      GML-Quellcode

      1. if(var_waypointxxx == 1) // wenn die variable var_waypoint 1 ist, dann macht er folgendes
      2. {
      3. mp_potential_step(obj_waypoint1.x,obj_waypoint1.y,3,true)// läuft zu waypoint1 (da haben wir die mp_potential step funktion wieder)
      4. if ((x == obj_waypoint1.x) && (y == obj_waypoint1.y)) // dann haben wir noch ein if im if, der herausfindet ob x an obj_waypoints x ist und das selbe mit y
      5. {
      6. var_waypointxxx=floor(random(5)) // wenn das der Fall ist, dann wird die variable var_waypoint neu generiert
      7. }
      8. }
    • round rundet... kaufmännisch?

      Also bei 0.5 oder höher rundet es auf und bei weniger rundet es ab.

      Zum Aufrunden benutzt man ceil(bla) ;)

      Finds sonst ganz gut eigentlich, vielleicht wagen sich nun ein paar Leute an GML ohne zu fragen wie man eine Variable deklariert =/

      Übrigens kommen einige Einrückfehler auch von der komischen Formatierung... zum Bleistift mag das Forum keine 2 Leerzeichen und keine 2 Tabs... zumindest nicht, als ich es das letzte mal probiert hab^^
      So far, Schattenphoenix~
      _____________________________________________________________________________
      "Who needs a stairway to heaven...
      If there is an elevator to hell... ?
      "
      - Vergessen
      "Auch ein perfektes Chaos ist etwas vollkommenes."
      - Jean Genet
    • Benutzer online 1

      1 Besucher