effektive mouse-over abfrage

  • GM 8

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

  • effektive mouse-over abfrage

    Hallo Community,
    da ich im Moment an einem etwas (für mich) komplexeren Spiel arbeite, habe ich eine Klassenhirarchie konzipiert.
    Eine Oberklasse gibt mir die Grundlagen für Knöpfe, Schaltflächen und dragbare Objekte.
    All diese brauchen die Variable mouse_over.

    Ich denke sie ist selbsterklärend: Wert 1 für "ja" und Wert 0 für "nein".
    Bis jetzt hatte ich das immer so gelöst:

    mouse enter -> setze 1
    mouse leave -> setze 0

    Nun habe ich allerdings ein Problem:
    Beweg ich selbst die Maus von den Objekten klappt alles wunderbar, nun allerdings habe ich ein Objekt was sich von meiner Maus "herunterbewegt". Folglich bleibt die mouse_over-Variable auf 1 und jedes mal wenn ich klicke, klicke ich auf alle Objekte, die sich von meiner Maus herunterbewegt haben ...

    Meine Idee war eine allgemeine Lösung indem ich sage:

    mouse_x muss im Intervall [x | x + objektlänge] liegen, ebenso wie mouse_y.

    Nun finde ich aber keine allgemeinen Wert für die Länge und Breite ... oder gibt es vielleicht auch noch wesentlich effektivere mouse_over-Abfragen?

    grüße
    naibaf77
    True story!
  • Also ich glaube du meinst:

    GML-Quellcode

    1. if(mouse_x > x && mouse_y > y && mouse_x < x + sprite_width && mouse_y < y + sprite_heigth) {
    2. mover = true;
    3. } else {
    4. mover = false;
    5. }


    oder kurz:

    GML-Quellcode

    1. mover = (mouse_x > x && mouse_y > y && mouse_x < x + sprite_width && mouse_y < y + sprite_heigth); //nícht getestet


    naibaf77 schrieb:

    Nun finde ich aber keine allgemeinen Wert für die Länge und Breite ... oder gibt es vielleicht auch noch wesentlich effektivere mouse_over-Abfragen?

    Meinst du sprite_width und sprite_heigth? Diese liefert die Breite/Höhe des Sprites.

    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.
  • Auch wenn dein Problem bereits gelöst wurde, hab ich hier noch eine Lösung die vor allem bei komplexeren Objekten bzw. mit komplexeren Sprites funktioniert.
    Beim oben genannten beispiel wird nur ein Rechteck abgefragt. Nichts für ungut Rodrog. Deine Lösung ist auch gut einsetzbar. Kommt natürlich immer dauf an für was man das braucht. :)

    - Erstell ein Sprite mit 1 px² (schwarz zb).
    - Erstelle ein Object und lade das Sprite rein (evtl. auch unter mask).
    - Schreibe im Step-Ev rein, dass es der Maus folgt. (x=mouse_x; y=mouse_y;)
    - Mach das Object unsichtbar. (visible = 0;)

    Nun kannst du immer und überall ne ganz normale Kollisionsabfrage starten.
    z.B. instance_place(x,y,obj_mouse);
    >>> Dies soll eine Signatur darstellen und ebenso den Zweck entfremden wie so oft in Foren. Dieser wäre den Leser über eine Kontaktaufnahme zu informieren. In der Paxis wird dieser aber verwendet um so halbwitzige bis überhaupt nicht komische Kommentare wie dieser zu verbreiten. Immerhin frisst dieser Signatur ausnahmsweise kein großen Platz weg.