Begehbare Fläche anzeigen

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

  • Begehbare Fläche anzeigen

    Hallo... da bin ich mal wieder.

    Hoffe ich werde euch nicht lästig... aber vielleicht bringt euch das selbst auf neue Ideen und hält eurch geistig fit, was in Zeit der Dauerwerbesendungen ja am wichtigsten ist.

    Ich suche ein Tutorial oder Beispiel, dass mir zeigt wie ich es bewerkstellige, dass ich die Figur anklicken kann und mir der PC anzeigt wohin sich diese Figur bewegen kann.

    Einfach erklärt: Boden besteht aus einem Schachbrett ähnlichem Muster aus Kachel-Objekten.

    Beim anklicken sollen sich die Kacheln in der Nähe in eine andere Farbe verwandeln und bei einem Klick auf den Punkt soll sich die Figur dort hinbewegen.

    Hui... das ganze klingt vom Effekt her sehr einfach... aber die Umsetzung erscheint mir super-schwer.

    Wenn ihr eine Lösung hättet wie ich die Kacheln in der Umgebung zur richtigen Zeit zum "leuchten " bringe würd mir das erstmal schon reichen.

    Habe ähnliche Umsetzungen dafür schon bei Hovendall Tactics und Toubou gesehen würd mich freuen wenn ich nen Tipp oder Tutorial bekommen könnte.

    Thx im Voraus
  • Also wenn das "Brett" wirklich wie ein Schachbrett, also aus Vierecken, aufgebaut ist, würde ich das so lösen, dass ich ein Array anlege, das für jedes Feld auf dem Brett ein Feld im Array bereit hält, und in jedem dieser Felder die Instanz-ID der Instanz speichert, die sich auf dem entsprechenden Feld des Brettes befindet (0, wenn das Feld leer ist). Weiterhin würde ich ein Skript erstellen, das aus den Koordinaten des Objekts (bzw. der Maus) im Raum die entsprechenden Koordinaten im Feld ermittelt (oder 2, falls man die X- und Y-Koordinate getrennt ermitteln will). Wenn man nun auf das Brett klickt, wird mittels dieses Skripts die X- und Y- koordinate des Maus auf dem Brett ermittelt, diese werden in die Indizes des Brett-Arrays eingesetzt, und es wird überprüft, wohin diese Figur gehen kann (da ich bei unterschiedlichen Figurentypen von unterschiedlichen Mustern ausgehe). Nun wird ein 2. Array angelegt, das genauso groß ist, wie das Brett-Array, aber nur die Werte 1 und 0 speichert, je nach dem, ob die ausgewählte Figur dort hin darf, oder nicht; standardwert aller Felder sollte 0 sein. Dann wird anhand der Position, die die Maus auf dem Brett hatte, die also auch die Position der Figur ist, und der Richtungen, in die sich die Figur bewegen darf, bestimmt, welche Felder auf 1 gesetzt werden. Und ein Controller-Objekt überprüft für jedes Feld jederzeit, ob man darauf ziehen darf, oder nicht, und zeichnet Quadrate auf die entsprechenden Felder, in denen das 2. Array den Wert 1 hat.

    Beispiel: (Ausgeführt werden sollte dies alles durch ein Controller-Objekt)

    Eine Figur, die sich nur ein Feld nach oben oder ein Feld nach unten bewegen kann steht in der Position (4;4) (Koordinatenursprung ist unten links). Die Maus klickt auf die Figur. Das Positionsskript ermittelt die entsprechenden Koordinaten der Maus auf dem Brett und speichert die irgendwo zwischen (z.B.: global.maus_brett_x=4; global.maus_brett_y=4;). Nun wird die Bewegung dieser Figur durchgeführt, wofür sich die Benutzerdefinierten Events eignen.
    In "User Defined Event 0" steht dann also:

    GML-Quellcode

    1. for(i=1; i<=10; i+=1) //ich gehe von einem 10*10 Feldrigen Brett aus
    2. {
    3. for(j=1; j<=10; j+=1)
    4. {
    5. global.erlaubt[i,j]=0;
    6. }
    7. }
    8. global.erlaubt[global.maus_brett_x-1,global.maus_brett_y]=1;
    9. global.erlaubt[global.maus_brett_x+1,global.maus_brett_y]=1;


    Aufgerufen wird das dann im Controlleronjekt durch

    GML-Quellcode

    1. with(global.brett[global.maus_brett_x,global.maus_brett_y])
    2. {
    3. event_user(0);
    4. }


    Durch diese Methode siehst du nicht nur, wo du hin darfst, du kannst das Array "erlaubt" auch noch dafür benutzen, zu überprüfen, ob der Spieler auf ein erreichbares Feld ziehen will.

    Ich hoffe, dass das verständlich war.
  • Vielen dank für deine Mühe...

    Was das Verständnis angeht... ich habe mir der Arrays noch nicht earbeitet, weshalb ich nicht behaupte ich könnte es aufgrund deiner Hilfe jetzt sofort umsetzen.

    Probleme gibt es gleich mehrere, zum einen haben alle Karten eine Unterschiedliche Größe was sich beheben ließe, indem man alle Karten auf eine Größe bringt und unwichtige Parts bei kleineren Karten auf Eis legt.

    Dennoch bleibt das Problem, dass es sich hierbei um größere Karten handelt, bis zu 100x100 Felder und wer weiß, wie sich das ganze auf die Performance auswirkt.

    Ob es ein Problem werden würde, dass mehrere Figuren vorhanden sind die nacheinander dran sind, kann ich so vom reinen Nachdenken aus noch nichteinmal abschätzen.

    Ich werd deinen Vorschlag dennoch im Hinterkopf behalten und wenn kein Vorschlag kommt, der leichter umzusetzen ist, diesen auch beherzigen. (oder um ehrlicher zu sein... mich nochmal ganz ausführlich über die Nutzung von Arrays informieren)

    Nochmal vielen Dank an alle, die sich mit meinen Problemen ihren Kopf zerbrechen :D
  • Benutzer online 1

    1 Besucher