Isometrisch markieren

  • GM 8
  • Isometrisch markieren

    Einen schönen Abend!

    Ich habe wieder ein "kleines" Problem, und zwar bräuchte ich 4 Formeln, die ich mir jetzt nach langen überlegen nicht herleiten kann (zumindest nicht, dass sie Immer richtig sind)
    So ich habe isometrische Felder die ich markieren sollte können. Ich klick auf eine drauf, ziehe das feld und dann lass ich los und dann hab ich alle Felder makiert.
    Ich bräuchte die Formel für die x bzw. y Koordinaten der beiden Eckpunkte (zwei habe ich). Da dies sehr schwer zu erklären ist hab ich ein bild dazu gemacht.



    Ecke 1 und Ecke 2 dafür bräuchte ich die Formeln. Den Rest müsste ich dann alleine schaffen :)
    Ich hoffe ihr wisst was ich meine.

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Sagen wir mal

    GML-Quellcode

    1. start.x
    2. start.y

    bezeichnen den Mittelpunkt des Feldes "Start" und

    GML-Quellcode

    1. ziel.x
    2. ziel.y

    den Mittelpunkt des Feldes "Loslassen" (wie in deinem Bild). Zudem brauchen wir noch die Variablen

    GML-Quellcode

    1. dx = 16
    2. dy = 8

    welche den horizontalen und vertikalen Abstand der Mittelpunkte zweier benachbarter Felder angeben. Die beiden Werte habe ich jetzt mal anhand deines Bildes ermittelt.

    Dann berechnen sich die Mittelpunkte der Felder "Ecke 1" und "Ecke 2" wie folgt.

    GML-Quellcode

    1. tx = (start.x+ziel.x)/2
    2. ty = (start.y+ziel.y)/2
    3. sx = (start.x-ziel.x)/2*dy/dx
    4. sy = (start.y-ziel.y)/2*dx/dy
    5. e1x = tx+sy
    6. e1y = ty+sx
    7. e2x = tx-sy
    8. e2y = ty-sx
    Alles anzeigen

    e1x, e1y und e2x, e2y sind dann die Ergebnisse. Ich hoffe ich hab mich nicht verrechnet, ansonsten einfach nochmal melden.
    Ich hab dir die Herleitung mal erspart, da ich aufgrund deines Alters davon ausgehe, dass dir Vektorrechnung noch nicht so viel sagt.
  • Naja, das sind ja nicht alles einzelne Objecte sondern das sind alle die selben objekte. ich hab das zurzeit jetzt so gelöst.

    im Creat-Event

    GML-Quellcode

    1. dx = 16
    2. dy = 8


    im LeftClick-Event

    GML-Quellcode

    1. global.mark = true; global.start = id;


    im Step-Event

    GML-Quellcode

    1. if mark == true
    2. {
    3. global.ziel = place_meeting(floor(mouse_x/32)*32+16,floor(mouse_y/16)*16+8,obj_GreenEarth);
    4. tx = (global.start.x+global.ziel.x)/2
    5. ty = (global.start.y+global.ziel.y)/2
    6. sx = (global.start.x-global.ziel.x)/2*dy/dx
    7. sy = (global.start.y-global.ziel.y)/2*dx/dy
    8. e1x = tx+sy
    9. e1y = ty+sx
    10. e2x = tx-sy
    11. e2y = ty-sx
    12. }
    Alles anzeigen


    leider kennt er die global.ziel Variable nicht.
    place_meeting, gibt doch die id des Objectes zurück oder?

    Doch ich kenn Vektorrechnungen, hatten wir in der ersten Klasse (bin jetzt 2te von 5).
    So schwer ist das nicht. :)


    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.

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

  • Naja, das sind ja nicht alles einzelne Objecte sondern das sind alle die selben objekte.

    Inwiefern hat das was mit meiner Antwort zu tun? ^^

    place_meeting, gibt doch die id des Objectes zurück oder?

    Die logische Herangehensweise, wenn man eine GM-Funktion verwenden will, ist doch eigentlich in der Dokumentation nachzuschlagen und nicht zu "raten" was die Funktion tut und welche Bedeutung die Parameter und der Rückgabewert haben.

    Dokumentation schrieb:

    place_meeting(x,y,obj) Gibt an, ob die Instanz an angegebener Position(x,y) das Objekt obj trifft. obj kann ein Objekt sein - in so einem Fall gibt die Funktion den Wert "true" zurück, wenn es auf eine Instanz des Objekts trifft. Es kann aber auch eine "instance id" sein, das besondere Wort "all" (bedeutet irgendeine Instanz irgendeines Objektes), oder das besondere Wort "other".

    Die Funktion gibt also nur "true" oder "false" zurück.

    Was du brauchst ist wohl eher

    GML-Quellcode

    1. instance_position(x,y,obj)
  • Inwiefern hat das was mit meiner Antwort zu tun? ^^

    Naja, weil du start und ziel benutzt hast ;) Ich dachte du meinst das anders.

    Die logische Herangehensweise, wenn man eine GM-Funktion verwenden will, ist doch eigentlich in der Dokumentation nachzuschlagen und nicht zu "raten" was die Funktion tut und welche Bedeutung die Parameter und der Rückgabewert haben.

    Ich war gestern ein bisschen zu Faul, sry ;) Das nächste Mal werd ich nachschauen.

    Was du brauchst ist wohl eher

    Jo genau das hab ich gebraucht.

    So und jetzt zum Thema: Es klappt wunderbar, danke Bl@ckSp@rk. Auf Vektorrechnung wär ich gar nicht mal darauf gekommen. :)
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.