Bewegung in einem Ds_Grid

  • GM 8

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

  • Bewegung in einem Ds_Grid

    Ich suche gerade nach einer effektiven Möglichkeit ein Objekt auf einer Art Schachbrett zu bewegen. Das für mich komplizierte daran wäre alle möglichen, sowie blockierte Felder markieren zu lassen. Auch fehlt mir der Ansatz dazu das Objekt mit nur einem Click über mehrere Felder hinweg bewegen zu lassen.

    Ich könnte mir jetzt zwar ein Codebeispiel erquälen, aber das würde dann nur so in etwa aussehen:

    Spoiler anzeigen

    GML-Quellcode

    1. if mouse_x<object.x && mouse_y=object.y
    2. {
    3. x-=64//müllcode
    4. }


    Ich bräuchte wie gesagt nur einen kleinen Anschubser. Auf den restlichen Code würde ich dann, denke ich, dann selber kommen. :D

    Edit: Achja, vielleicht wichtig zu erwähnen wäre, dass es sich um ein Client-Server-Client Spiel handelt und es evtl. Fähigkeiten geben soll, die einem das Überfliegen der Mauern ermöglichen sollen.

    Ich hab mal ein High-Tech Paint Bild zur Illustration angehängt. :D
    Bilder
    • Movement.png

      9,09 kB, 638×630, 174 mal angesehen
  • Was genau meinst du mit "mit einem Mausklick über mehrere Felder bewegen"?
    Soll die Bewegung beim Klick quasi simuliert werden? Also automatsicher Sprung von Feld zu feld bis hin zur Mausposition, oder soll das Objekt direkt dahin springen?

    Das mit dem Makrieren kannst du wie richtig vermutet mit einem DS-Grid, oder eventuell einfacher, mit einem zweidimensionalen Array lösen. Array is beim direkten Abfragen deutlich schneller, aber wenn du oft aus welchen Gründen auch ganze Bereiche des Felds manipulieren musst (Rechtecke oder Kreise), ist ein ds_Grid durch seine vielen eingebauten Funktionen efektiver.

    Wenn es daran hakt die mosue oder Objekt position in eine Position des Grids umzuwandeln dann heir mal ein Ansatz:

    GML-Quellcode

    1. xx = floor((x-GITTEROFFSET)/FELDBREITE)
    Daraufhin ist in xx der x-wert des Feldes in dem sich die Raum-Position x befindet.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • DragonGamer schrieb:

    Soll die Bewegung beim Klick quasi simuliert werden? Also automatsicher Sprung von Feld zu feld bis hin zur Mausposition
    Genau, so meinte ich das. Statt sofort dort hin zu springen bewegt sich das Objekt von Feld zu feld und aktiviert gegebenfalls Fallen.

    DragonGamer schrieb:

    aber wenn du oft aus welchen Gründen auch ganze Bereiche des Felds manipulieren musst (Rechtecke oder Kreise), ist ein ds_Grid durch seine vielen eingebauten Funktionen efektiver.
    Wenn Flächenschaden auch dazu zählt, dann ja. Trifft quasi eine Attacke mit einem Flächenschaden-Radius von 1 auf Feld xy, dann werden alle Felder ein Feld um dieses herum auch betroffen.

    DragonGamer schrieb:

    Daraufhin ist in xx der x-wert des Feldes in dem sich die Raum-Position x befindet.
    Ok. Das habe ich mir schon mal gemerkt. :D
  • Hmm, du musst die Bewegung mit Alarmen auslösen.
    Dabei ist es aber wichtig zu wissen wie sich der Körper bewegen soll? Immer auf direktesten Wege, ohne auf irgendwelche Hindernisse zu achten?

    Ich erinnere mich irgendwo sowas schon mal jemandem erklärt zu haben.. aber ka wo ><
    Auf jeden Fall solltest du ein System bauen welches alle halbe Sekunde (oder wie lange die Zeit zwischen zwei Bewegungen sein soll) in etwa folgendes macht:

    1. Anzahl Zellen in y-richtung zwsichen Objekt und dessen Ziel berechnen.
    2. Anzahl Zellen in x-richtung zwsichen Objekt und dessen Ziel berechnen.
    3. Entsprechend welcher der beiden größer ist, entweder in y-richtung oder in x-richtung einen Schritt machen.
    4. Fallen an der neuen Position auslösen
    5. Prüfen ob die Koordinaten schon mit dem Ziel übereinstimmen. Gegebenfalls das ganze beenden (den Gegner seinen nächsten Zug machen lassen oder so.

    Wenn du nicht durchdringabre Hindernisse hast die automatisch umschifft werden sollen, wird das ganze etwas schwieriger...

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • DragonGamer schrieb:

    Wenn du nicht durchdringabre Hindernisse hast die automatisch umschifft werden sollen, wird das ganze etwas schwieriger...
    Die habe ich leider. Es wird Wände und dergleichen geben. Lässt sich da mit der Collision_Line etwas machen? o_o

    Hier nochmal ein Beispiel:
    Bilder
    • Movement - Kopie.png

      18,9 kB, 638×630, 114 mal angesehen
  • Ahh.. naja, der GM hat für sowas die mp_grid_ Funktionen. Die nehmen dir zumidnest die Implementation des Pfadfindungsalgorithmusses ab.

    Lies dir dazu das Kapitel in der Hilfe mehrfach durch und versuch alles zu verstehen.
    Was du machen musst ist solch ein grid mit mp_grid_create zu erstellen (nicht das selbe wie ds_grid) und darin all deine besetzten Felder einzuspeichern mittels mp_grid_add_cell.
    Das musst du nur einmal am Anfang des spiels machen. Oder jedes mal wenn neue, besetzte Felder hinzukommen.

    Soll sich nun ein Objekt bewegen, kannst du die mp_grid_path Funktion aufrufen welches einen ebreits existeirenden Path verändert und darin den kürzesten Pfad vom Start zum Ziel speichert.
    Diesen Pfad musst du dann ähnlich wie in der oben beschriebenen Variante schritt für schritt abhandeln.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)