Instance create auf einem Bestimmten objekt mit der Maus

  • GM 8

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

  • Instance create auf einem Bestimmten objekt mit der Maus

    Hallo

    Ich habe ein objekt welches 1000x1000 groß ist in einem Raum von 800x800 somit ist ein teil des Objektes Außerhalb des raumes. Jetzt soll man an der Position der Maus ein Objekt erstellen können welches aber auf denn koordinaten des Objektes erstellt werden und nicht die vom Raum.

    Wie kann man das machen?

    Beispiel seht ihr im Bild
    Bilder
    • text2993.png

      10,91 kB, 529×371, 428 mal angesehen
    Meine Webseite: jesoftmedia.de

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Max77771 ()

  • Meinst du das im Sinne von "Die Mauskoordinate wird auf das Objekt gepackt"?
    Wenn ja, dann musst du einfach so vorgehen:

    GML-Quellcode

    1. resX = mouse_x/room_width * objW; // objW ist die Breite
    2. resY = mouse_y/room_height * objH; // objH ist die Höhe


    - Tobi97

  • Meinst du das im Sinne von "Die Mauskoordinate wird auf das Objekt gepackt"?
    Wenn ja, dann musst du einfach so vorgehen:


    Ja so etwas meine ich aber der Code funktioniert nicht.

    Kann man nicht einfach die Position der Maus auf dem Objekt anstatt denn raum abfragen?
    Meine Webseite: jesoftmedia.de
  • Ach so meintest du das.

    Versuch's mal mit

    GML-Quellcode

    1. resX = mouse_x - x;
    2. resY = mouse_y - y;

    Wenn das ned das is, was du wolltest, erläutere mal das Problem etwas genauer^^

    - Tobi97
  • Nein Das ist es auch nicht.

    Ich versuche es noch einmal zu erklären:

    Im Normalfall hat der Raum Koordinaten das heißt, wenn man mit der Maus klickt, wird ein Objekt in den Koordinaten vom Raum erstellt. Ich möchte im Grunde genau das selber aber nicht mit einem Raum sondern einem Objekt. Das Objekt soll ein eigenes unabhängiges Koordinatensystem haben.
    Meine Webseite: jesoftmedia.de
  • Mach beim Create Event der Objekte zum Beispiel:

    GML-Quellcode

    1. xx = mouse_x
    2. yy = mouse_y

    Das sind jetzt die Koordinaten des Obejktes auf dem anderen Objekt.
    Im Step Event schreibst du dann:

    GML-Quellcode

    1. x = DasObjekt.x + xx
    2. y = DasObjekt.y + yy


    Das erstellt ein Objekt, das sich auf dem großen Objekt bewegt.
    Musst halt noch abfragen, ob die Maus im großen Objekt ist.
  • @Max: Ich interpretiere dein Problem folgendermaßen: Du willst die Koordinaten des Mauszeigers relativ zum besagten Objekt ermitteln. ABER genau das löste Tobi97 bereits und da du die Richtigkeit bzw. Zutrefflichkeit in deiner Antwort verneinst, bitte ich dich deine Frage zum besseren Verständnis deines Problems noch einmal zu reformulieren.
  • Ich möchte ein Objekt haben mit einem eigenen Koordinatensystem also oben links x=0 & y=0. Dieses soll sich genau so wie das Koordinatensystems des Raumes verhalten also wenn man eine Instance hinzufügt hat diese z.b. x=20 & y=100.

    Da mein problem unverständlich ist mache ich Morgen Ein Beispiel.
    Meine Webseite: jesoftmedia.de
  • Mach beim Create Event der Objekte zum Beispiel:

    GML-Quellcode

    1. xx = mouse_x
    2. yy = mouse_y



    Das sind jetzt die Koordinaten des Obejktes auf dem anderen Objekt.
    Im Step Event schreibst du dann:

    GML-Quellcode

    1. x = DasObjekt.x + xx
    2. y = DasObjekt.y + yy




    Das erstellt ein Objekt, das sich auf dem großen Objekt bewegt.
    Musst halt noch abfragen, ob die Maus im großen Objekt ist.


    Mit einwenig Denken hat der Code bei mir mehr oder weniger funktioniert. Es werden jetzt zwar Objekte auf dem Hintergrund Objekt erstellt aber nicht an der Maus Position, sondern deutlich versetzt circa x+200 und y+100. Außerdem habe ich noch ein Problem, wovon ich noch nichts gesagt habe, das Hintergrund Objekt ist bewegbar. Da der Code ein steep Event hat wird die Position ja immer berechnet also, wenn ich das Hintergrund Objekt bewege, bleibt alles richtig aber man sieht, dass das Objekt auch bewegt wird und dann wieder richtig hingestellt wird das Soll aber so nicht sein das Objekt soll Fest sein.
    Meine Webseite: jesoftmedia.de
  • Fest? Du meinst, dass das Objekt um die Geschwindigkeit des Hintergrundobjektes "verschoben" wird?

    Dann musst du dafür sorgen, dass der Step Code von dem Objekt nach dem Bewegungscode vom großen Objekt ausgeführt wird,
    also pack den Step Code in das End Step Event. Das sollte das Problem eigentlich lösen, solange das Hintergrundobjekt seine Position
    nicht auch im End Step Event oder im Draw Event verändert.

    Und dann noch der veränderte Code fürs erstellen. Habs nicht ausprobiert,
    sollte aber funktionieren.

    GML-Quellcode

    1. xx = HintergrundObjekt.x -mouse_x
    2. yy = HintergrundObjekt.y -mouse_y
  • Max77771 schrieb:

    Leider Funktioniert es nicht Die Erstellung des Objektes ist noch ungenauer und das Problem mit dem verschieben besteht weiterhin obwohl ich zum verschieben nur diesen code benutze:

    im Step Event

    GML

    1



    global.posx +=4;
    Die Beschreibung des Problems ist einfach nur

    Das ist ne globale Variable... Wo ist der Code genau drin? Warum global?
    Posx? Eine Koordinate? Ist die jetzt für das Hintergrundobjekt?

    Ich glaub ich blicks einfach nicht und hab auch nicht die Nerven dafür.
  • Im Anhang Eine Beispiel Datei Mit denn Problemen

    Erklärung Zur Datei

    -Im Ordner "Unwichtig" sind keine wichtigen Daten.
    -Startet das Programm wähl eine Größe und klickt auf weiter jetzt seht ihr mein Problem ein Koordinatensystem. Zum Objekte Hinzufügen müsst ihr links auf das schwarze Feld klicken und dann in das Koordinatensystem.

    Datei Entfernt
    Meine Webseite: jesoftmedia.de

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

  • Wenn du möchtest dass die Objekte an der Maus Position erstellt werden, und die Variablen xx und yy die koordinate relativ zu deinem Hintergrund sein sollen, musst du diese zunächst richtig berechnen.
    Willst du also die Koordinate der Maus in deinem neuen Koordinatensystem, errechnest du die Differenz dieser beiden Punkte.

    GML-Quellcode

    1. xx = mouse_x - obj_editor_room_1.x;

    GML-Quellcode

    1. yy = mouse_y - obj_editor_room_1.y;


    Das sollte Funktionieren!


    Wieso die Ojekte beim scrollen so nachhängen kann ich mir gerade nur dadurch erklären, dass die Events in einer für dich und in diesem Fall ungünstigen Reihenfolge ablaufen, aber dass sollen mal lieber die klären, die sich mehr mühe geben, sich in deine Datei einzulesen.
  • Wenn du möchtest dass die Objekte an der Maus Position erstellt werden, und die Variablen xx und yy die koordinate relativ zu deinem Hintergrund sein sollen, musst du diese zunächst richtig berechnen.
    Willst du also die Koordinate der Maus in deinem neuen Koordinatensystem, errechnest du die Differenz dieser beiden Punkte.

    GML-Quellcode

    1. xx = mouse_x - obj_editor_room_1.x;
    2. yy = mouse_y - obj_editor_room_1.y;



    Dieser Code Funktioniert Die Objekte werden Richtig erstellt allerdings bleibt noch das Problem mit dem Unschönen Verschieben.

    Wieso die Ojekte beim scrollen so nachhängen kann ich mir gerade nur dadurch erklären, dass die Events in einer für dich und in diesem Fall ungünstigen Reihenfolge ablaufen, aber dass sollen mal lieber die klären, die sich mehr mühe geben, sich in deine Datei einzulesen.



    Was heißt "ungünstigen Reihenfolge" man kann die Reihenfolge doch gar nicht beeinflussen?


    Verbesserte und vereinfachte test version im Anhang
    Dateien
    • Beispiel.zip

      (40,48 kB, 325 mal heruntergeladen, zuletzt: )
    Meine Webseite: jesoftmedia.de

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

  • Hab mir das ganze nochmal genauer angesehen und ich weiß jetzt was das problem ist.
    Um das zu verstehen muss man sich die Reihenfolge ansehen, in der deine Events ausgeführt werden.

    1) Klicken auf "Pfeil Runter" >> global.posY -= 4
    2) versetzen der Baum Objekte auf die Position im Grid(die sich an dieser stelle noch NICHT geändert hat)
    3) setzen der x und y Koordinaten des Koordinaten objektes auf die neue global.posY Position
    4) Alles Zeichnen(draw events)
    5) step event des Baumes, versetzen an die neue Position
    6) Alles zeichnen

    Du siehst also, dass es an der Reihenfolge liegt, in der deine Events ausgeführt werden.
    Wie ändern wir das?
    Die "Pfeil Runter" Step Events, müssen in der Reihenfolge weiter nach vorne, und das Versetzen der Baumes weiter nach Hinten.
    Also sind die "Pfeil Runter" Events nun begin Step, und die Step Events der Bäume end Step events.