tutorial hilfe

  • GM 8

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

  • Ich kenn kein solches Tutorial. Aber ich denk mir mal fix was aus.

    Schritt 1
    Aber es empfiehlt sich für solche Spiele, die Spiellogik erstmal sehr abstrakt zu halten. Das heißt du versuchst nicht, jedes Element als Objekt auf dem Bildschirm wirklich zu bewegen, sondern stellst dir das Spielfeld als Array vor (alternativ auch ds_grid, aber das ist aktuell buggy) und überlegst dir dann mögliche Zustände.

    Das kann z.B. damit anfangen, dass in deinem Array eine 0 für leer steht, eine 1 für ein rotes Element, eine 2 für blaues usw.. Dann schreibst du eine draw-Funktion, die dieses Array entsprechend malt. Ist dort eine 1, malst du den Sprite für den roten Spielstein hin. Dann schreibst du noch Funktionen wie z.B. do_a_step, in der das ganze Array durchgegangen wird (von unten nach oben) und bei jeder 0 das Feld den Wert des Feldes direkt darüber bekommt. Dieses andere Feld wird dann auf 0 gesetzt. Pseudo-Code:

    GML-Quellcode

    1. for (yy=hoehe;yy>0;yy--) { // yy = 0 wird ausgelassen weil oberste Reihe
    2. for (xx=breite;xx>=0;xx--) {
    3. if (playfield[xx, yy] == 0 && playfield[xx, yy-1] > 0) { // das > 0 wird weiter unten erklärt
    4. playfield[xx, yy] = playfield[xx, yy-1];
    5. playfield[xx, yy-1] = 0; // das Feld darüber ist jetzt frei
    6. }
    7. }
    8. }

    Herzlichen Glückwunsch, du hast soeben "Runterfallen" programmiert.
    Mit ähnlicher Vorgehensweise kannst du jede Menge Aktionen auf deinem Spielfeld programmieren. Lediglich ist dann alles "instant", d.h. es gibt sofortige Bewegungen.


    Schritt 2
    Wenn du Aktionen haben willst, die zeitlich verzögert passieren, musst du dir eine Erweiterung überlegen. Den Zustand der Zwischenschritte speicherst du am besten getrennt ab (vielleicht in einem zweiten Array, vielleicht auch in einer Liste oder sowas). Damit die Felder, auf denen gerade "etwas passiert", z.B. beim Runterfallen ignoriert werden, gibst du denen vielleicht einfach ein negatives Vorzeichen. Also -1 wäre dann ein roter Block, mit dem gerade etwas passiert. Sobald dann die Aktion auf Zeit (wie z.B. das Vertauschen von zwei Blöcken) abgeschlossen ist, setzt diese Aktion die Werte wieder positiv.

    Eine sehr primitive und GM-spezifische Lösung wäre ein eigenes Objekt. Ich nenne es mal objSwitchBlocks. Dieses wird erstellt, wenn die entsprechende Aktion ausgeführt wird. In einer Instanz des Objekts speicherst du dann die Positionen der betroffenen Blöcke im Array. Dann setzt du einen Alarm, und im Alarm-Event werden die Felder wieder positiv gesetzt, die Farben getauscht und die Instanz zerstört. Das Draw-Event dieses Objekts stellt die Tausch-Animation dar. Das draw-Event des Arrays modifizierst du derweil so, dass negative Einträge nicht gezeichnet werden.


    Schritt 3
    Du wirst eventuell feststellen, dass dein Spiel sehr langsam ist. Wenn er z.B. in jedem Step das Runterfallen-Script und zwei ähnliche Scripts durchläuft, kann das sehr in die FPS gehen. Du solltest dir dann überlegen, welche Folgen eine Aktion haben kann und nur für die betroffenen Felder/Spalten/Zeilen die entsprechenden Kontrollen durchführen. Vertauschst du also z.B. horizonal Blöcke, müssen anschließend nur zwei Spalten auf Lücken überprüft werden.



    Aber das ist nur eine spontane Idee.
  • ich weis nicht wie du es meinst aber,
    wie willst du es denn tauschen?
    also was muss man machen, dann kann ich das besser erklären
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Benutzer online 1

    1 Besucher