Wie kann ich nachfolgenden Mausclicks auf dasselbe Objekt verschiedene Aktionen zuweisen?

  • GM 8
  • Wie kann ich nachfolgenden Mausclicks auf dasselbe Objekt verschiedene Aktionen zuweisen?

    Hallo Leute,

    ich habe ein Problem, für das es vermutlich eine total simple Lösung gibt, aber ich versuche und suche jetzt schon seit mehreren Stunden ohne Erfolg.

    Es geht darum, dass ich eine Aktion starten möchte, wenn man auf ein Objekt drückt.

    Erstmal kein Problem. Ich mach Event "Pressed Left Mouse Button" und weise die Aktion zu. Funktiert einwandfrei.

    Jetzt möchte ich aber, dass wenn man ein zweites Mal auf das Objekt drückt, eine andere Aktion ausgeführt wird. Zum Beispiel das nächste Subimage geladen wird.

    Ich kann "Pressed Left Mouse Button" aber nur einmal als Event auswählen. Ich habe probiert die verschiedenen Handlungen durch das D&D "Mouse Button: Left" zu verknüpfen, aber dann werden sofort alle ausgeführt.

    Wie kriege ich es hin, nachfolgenden Clicks getrennte Aktionen zuzuweisen? Lösungen via D&Ds oder mit Code wären beide hilfreich.

    Bitte dringend um Hilfe!

    gredtz,
    sithem

    ZUR ILLUSTRATION

    Event: Create, Action: Code: image_speed = 0;

    Event: Pressed Left Mouse Button, Action: Code: image_index = 1, Action: If left Mouse button is pressed, Action: Code: image_index = 2

    ---> Führt bei mir dazu, dass beim ersten Click der image_index direkt von 0 auf 2 springt und nicht wie gewünscht beim ersten Click auf 1 und beim zweiten Click auf 2
  • Dann setz doch den Imageindex auf += 1 :)

    ich denke aber das du mit released besser dran bist als mit pressed, denn es könnte sein, dass er immernoch trotz einmaligen pressen, sehr schnell += 1 += 1 rechnet und so wieder auf zwei ist.

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • Hallo Aku_Ryou,

    danke für die schnelle Antwort! Leider löst sie mein Problem nicht ganz.

    Die Lösung mit image_index funktioniert natürlich, aber ich habe mich nur für das Beispiel auf den index beschränkt: eigentlich will ich mit jedem Click eine ganze Reihe von Aktionen ausführen.

    "Release Button" statt "Pressed Button" geht leider auch nicht. Erstens kann man auch keine mehrere "Left Butten Released" als Events angeben. Zweitens gibt es als D&D Action nur "Pressed Button".

    Hoffe weiter auf Hilfe!

    gredtz,
    moritz
  • ok, ja trotzdem kein Problem^^

    also du definierst eine Variable zB status = 0;
    jetzt hast du zwei möglicheiten, entweder DnD oder eine dieser Funktion

    GML-Quellcode

    1. mouse_check_button(numb) Returns whether the mouse button is currently down (use as values mb_none, mb_left, mb_middle, or mb_right).
    2. mouse_check_button_pressed(numb) Returns whether the mouse button was pressed since the last step.
    3. mouse_check_button_released(numb) Returns whether the mouse button was released since the last step.

    dort erhöhst du den Wert von Status um 1

    und dann hast du wieder 2 Möglichkeiten :)

    entweder eine If abfrage:

    Dann in der Klammer alle Aktionen die passieren sollen und am Ende kannst du noch

    GML-Quellcode

    1. break;
    2. //oder
    3. exit;

    setzen (also jeweils nach einer if status == irgendwas Abfrage)

    oder einen switch:

    GML-Quellcode

    1. switch (status)
    2. {
    3. case 0: image_index, var1, rotate, xyz ++
    4. break;
    5. case 1: image_index, var1, rotate, xyz --
    6. break;
    7. default: ;
    8. }



    Also: du brauchst nur ein button Event dennn die Variable regelt welche Aktionen im Event angesteuert werden und welche nicht

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • Hallo Aku_Ryou,

    nochmal danke für die Antwort!

    Ich habs probiert, aber bei mir funktioniert es nicht. Mein Ziel war, dass beim ersten Click auf das Objekt obj_chipGelb das Objekt obj_red0 an einer bestimmten Stelle erzeugt wird und beim zweiten Click auf obj_chipGelb dasselbe Objekt (red0) an einer anderern Stelle.

    An deiner Lösung orientiert habe ich dann folgendes gemacht.

    Bei obj_chipGelb:

    Create: Code: status = 0

    If Left Mouse Button Pressed: Execute Script: scr_mouseTest

    //Bis hier müsste alles in Ordnung sein, oder? Ich habe die Variable definiert und will per Mouseclick das Script aufrufen. Im Script habe ich dann folgendes geschrieben:

    if (mouse_check_button_pressed(mb_left) && position_meeting(mouse_x,mouse_y,obj_chipGelb))
    {
    status += 1
    }

    switch (status)
    {
    case 1:
    instance_create(300, 300, obj_red0);
    case 2:
    instance_create(300, 600, obj_red0);
    }

    //Damit habe ich doch genau das emacht, was du vorgeschlagen hast, oder? Egal wie oft ich jetzt aber auf obj_chipGeld klicke, das obj_red0 erscheint einfach nicht (an keiner der beiden Positionen) :(

    Was mach ich falsch?

    gredtz,
    sithem

    PS: Ich hatte auch mal versucht das Script während dem Create zu aktivieren, da der Mouseclick ja über das Script geregelt werden soll, bekomme da aber Fehlermeldung.
  • mach mal das && position_meeting(mouse_x,mouse_y,obj_chipGelb)) weg, solange du nicht die global left press events benutzt braucst du das eig nicht, eig müsste es reichen wenn du in das



    führst du
    If Left Mouse Button Pressed: Execute Script: scr_mouseTest im create event aus?
    das funzt glaub nicht, da das create event nur ausgeführt wird wenn das objekt erstellt wird

    ich würdes an deiner stelle so machen,

    in das create event schreibst du
    status = 0

    dann machst du ein mouse button event
    da kommt dann nur status += 1 rein

    ich würde dann im step event den switch code ausführen,
    switch (status)
    {
    case 1:
    instance_create(300, 300, obj_red0);
    break;
    case 2:
    instance_create(300, 600, obj_red0);
    break;
    }

    eigentich sollte das dann auch klappen
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey