Mausklick

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

  • Hi Leute!
    Hab schon wieder ein kleines Problem: :no:
    Ich habe ein controller-object, in dem abgefragt werden soll, ob ein Linksklick auf obj_1 stattfindet.
    Hab es so versucht:

    Step-Event:

    GML-Quellcode

    1. {
    2. var geschw;
    3. geschw = 0
    4. if (mouse_check_button_pressed(obj_1.x,obj_1.y,mb_left))
    5. {
    6. geschw = 1
    7. }
    8. }


    Was besseres ist mir nicht eingefallen!
    In der Hilfe hab ich auch nichts gefunden :(
    Ich hätte ja auch einfach oben rechts bei Object: obj_1 einstellen können, aber das gleiche mach ich auch noch mit zwei anderen (obj_2, obj_3)
    :?: ?( :(


    €dit: Ich mach dass bewusst nicht in die anderen Objecte (obj_1, obj_2, obj_3), weil das controller-object Persistent ist und die anderen nicht!

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

  • Das ist definitiv ein ungünstiger Weg. Du solltest auf jeden Fall das Left Pressed Event der einzelnen Objekte verwenden. Ich weiß jetzt nicht so genau was dich davon abhalten sollte, denn den Grund mit dem Persistent kann ich nicht nachvollziehen. Bitte nochmal erklären warum du das Event dafür nicht verwenden kannst.
  • o_O
    Das stimmt ja garnicht!
    Das (eine) Argument von mouse_check_button_pressed ist die Maustaste.
    Ok... wie wärs damit:

    GML-Quellcode

    1. var xx,yy,geschw;
    2. xx=mouse_x;
    3. yy=mouse_y;
    4. geschw=0;
    5. if(mouse_check_button_pressed(mb_left))&&(point_distance(xx,yy,obj.x,obj.y)<20){
    6. geschw=1;
    7. }

    Das kommt aber drauf an, was für ne Art Objekt das ist.
    Bei einem kleinen, eher Runden Objekt ist das kelin Problem.
    Aber z.B. bei einem Button ist das was anderes.
    Dann würde ich generell das nehmen:

    GML-Quellcode

    1. var xx,yy,geschw;
    2. xx=mouse_x;
    3. yy=mouse_y;
    4. geschw=0;
    5. if(mouse_check_button_pressed(mb_left))&&(position_meeting(xx,yy,obj)){
    6. geschw=1;
    7. }

    Praktisch ist auch: Statt obj kann man auch self nehmen, dann giltet das für das Objekt, was den Code gerade ausführt. Aber das gilt hier nur, wenn dein Objekt ein Sprite hat! Dann prüft er, ob die Maus auf dem Sprite ist.
  • wie wäre es so:

    GML-Quellcode

    1. {
    2. var geschw;
    3. geschw = 0
    4. if(mouse_check_button_pressed(mb_left))&&(instance_position(mouse_x,mouse_y,obj_1))
    5. {
    6. geschw = 1
    7. }
    8. }

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

  • instance_position(x,y,obj) Gibt die ID der Instanz des Objektes obj an Position (x,y) an. Falls mehrere Instanzen an dieser Stelle sind, wird nur die erste gemeldet. obj kann ein Objekt oder das Schlüsselwort "all" sein. Wenn es nicht existiert, wird das spezielle Objekt "noone" zurückgegeben.

    Ok, das könnte eventuell auch gehen, ist aber definitif nicht die beste Lösung!
  • Original von copyboy
    instance_position(x,y,obj) Gibt die ID der Instanz des Objektes obj an Position (x,y) an. Falls mehrere Instanzen an dieser Stelle sind, wird nur die erste gemeldet. obj kann ein Objekt oder das Schlüsselwort "all" sein. Wenn es nicht existiert, wird das spezielle Objekt "noone" zurückgegeben.

    Ok, das könnte eventuell auch gehen, ist aber definitif nicht die beste Lösung!


    bitte warum das den nit? ist die beste die man meines wissens nach per gml rausjucken kann O.o
  • instance_positon() gibt nur die ID raus. Das, was hier gesucht wird, ist dieses hier:
    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".


    Mit

    GML-Quellcode

    1. instance_position(mouse_x,mouse_y,obj_1)
    geht es auch, nur muss dan eine KLeinigkeit verändert werden:

    GML-Quellcode

    1. instance_position(mouse_x,mouse_y,obj_1)!=-1
    kostenlose Android-Spiele:
    hexavirScribble Triple

    Mr. Peperonico auf Facebook
  • Original von copyboy
    Also 1. Er will ja prüfen, ob die MAUS auf einem Objekt ist
    und nicht ob an der MAUSPOSITION ein Objekt ein anderes trifft!
    [...]

    Das geht mit dem Code place_meeting, wenn man schreibt

    GML-Quellcode

    1. place_meeting(mouse_x,mouse_y,obj_1)

    Ich halte dies für die sicherste Lösung.

    OK, gut, zu 2. da könntest du Recht haben ;)
    kostenlose Android-Spiele:
    hexavirScribble Triple

    Mr. Peperonico auf Facebook

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

  • Ok, Ok, natürlich geht es auch so mit GML, aber ich würde jedem empfehlen immer so wenig wie möglich GML zu verwenden, denn GML wird nunmal interpretiert und ist demnach nicht das schnellste. Man sollte wirklich so gut es geht die vom GM vorgegebenen Features benutzen, dazu zähle ich z.b. das objektorientierte und auch die Events. Ich würde wirklich versuchen das Mouse-Left-Pressed Event zu verwenden anstatt in jedem Step ein Prüfscript ausführen zu lassen. Das macht zwar der GM intern auch für das Mouse-Left-Pressed Event, ist aber kompiliert und darum schneller. Und gerade bei sehr vielen solcher Prüfscripte wirkt sich das auf die Performance aus, auch wenn man das jetzt vielleicht als pingelig ansehen könnte. ;)
  • Benutzer online 6

    6 Besucher