Mausklick führt 2 Aktionen gleichzeitig aus

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

  • Mausklick führt 2 Aktionen gleichzeitig aus

    Der Titel sagt mal wieder nicht genau worum es geht :)

    In meinem Spieler-Objekt habe ich (per Drag&Drop) eine Kollisions-Abfrage mit einem Katana-Schwert (Globale Variable 1) mit folgendem Code:

    GML-Quellcode

    1. ​if mouse_check_button_pressed(mb_right)
    2. {
    3. global.weapon = 1
    4. with objWeapon01 instance_destroy()
    5. }


    Wenn ich also auf dem Schwert stehe und die rechte Maustaste drücke, nimmt der Spieler das Schwert auf (Änderung des Sprites) und zerstört das Objekt selbst (da wir es ja aufgenommen haben, soll es nicht mehr auf dem Boden liegen).

    Das klappt soweit. Nun soll es aber nicht nur eine Waffe geben. Als Test erstellte ich einen Vorschlaghammer mit der globalen Variable 2 (0 ist übrigens unbewaffnet) und machte die gleiche Kollisionsabfrage wie mit dem Katana.

    Lief auch gut, nur sollte das Schwert dann nicht einfach verschwinden, sondern weggeworfen werden und wieder irgendwo "landen". Bis zum "landen" bin ich nicht gekommen, da sich ein anderes Problem auftat. Mein Step-Code beim Spieler (der relevante Teil nehme ich an):

    GML-Quellcode

    1. // prüfen durch eine Variable (global.weapon) welche Waffe der Spieler gerade nutzt, 1 = Katana
    2. if global.weapon == 1
    3. {
    4. // Wenn der Spieler sich nicht bewegt wird das Sprite Stay (Stehen) verwendet, sonst der normale Sprite mit Lauf-Animation
    5. if (speed==0)
    6. {
    7. sprite_index = sprKatanaStay;
    8. direction = point_direction(x,y,mouse_x,mouse_y)
    9. }
    10. else
    11. {
    12. sprite_index = sprKatanaWalk
    13. }
    14. // Wenn rechte Maustaste gedrückt wird, wirft der Spieler die genutzte Waffe weg
    15. if mouse_check_button_pressed(mb_right)
    16. {
    17. my_id = instance_create (x,y,objWeapon01) // die Waffe wird direkt beim Spieler neu erstellt
    18. my_id.speed = 10 // die Geschwindigkeit, mit der die Waffe geworfen wird
    19. my_id.direction = point_direction(x, y, mouse_x, mouse_y) // Bestimmt die Richtung, in der geworfen wird (hier: Mauszeiger)
    20. my_id.image_angle = my_id.direction // die Ausrichtung des Objekts, hier zeigt es in Richtung des Mauszeigers
    21. global.weapon = 0
    22. }
    23. }
    Alles anzeigen


    Wenn ich damit zum Katana gehe und die rechte Maustaste drücke, wird das Schwert zwar aufgenommen und verschwindet vom Boden aber leider wirft der Spieler es auch gleichzeitig wieder weg. Das ist nicht in meinem Sinne, wie Ihr Euch denken könnt. Ich bin halt ein Noob und finde den Fehler/ die Lösung nicht. Hat da wer vielleicht eine Idee, die er mit mir teilt :)
  • Vertausch am besten beide Code stücke.
    Dann wird erst abgefragt, ob man die Waffe hat (die man ja noch nicht hat) und dann wird sie erst aufgenommen. So würde es eigentlich gehen!
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • -$Marvin$- schrieb:

    Füg mal ein "mouse_clear(mb_right)" in den beiden mouse_check_button_pressed Blöcken ein.

    Aus der Hilfe:
    mouse_clear(button) Löscht den Status des Mausknopfes. Das heißt, es werden solange keine Mausereignisse erzeugt, bis der Spieler den Knopf loslässt und erneut drückt.


    Ok, damit kann ich das Katana aufnehmen ohne es gleich wieder wegzuwerfen aber ich habe vergessen zu schreiben, wenn ich mit dem Katana auf den Vorschlaghammer gehe und diesen mit Rechts-Klick aufnehme, verschwindet das Katana dadurch natürlich, wird aber nicht weggeworfen :(


    @husi012 Du meinst, das wegwerfen der Waffe in die Kollisionsabfrage und das Aufheben der Waffe im Step?


    Danke schon mal für die schnelle Hilfe :)
  • Captain_Knorke schrieb:





    @husi012 Du meinst, das wegwerfen der Waffe in die Kollisionsabfrage und das Aufheben der Waffe im Step?


    Habe ich ausprobiert - das gleiche Ergebnis, Waffe aufgenommen und gleich wieder weggeworfen,
    Habe dann ein extra Script gemacht das dann geladen wird - keine Änderung,
    Dann ein weiteres Event per Drag&Drop für Rechts-Klick mit meinem Code fürs wegwerfen gesetzt, da es sich unter dem Kollisions-Event befindet... wieder nichts :(
  • Ich meinte, dass du die Ausführung vertauschen sollst. Also sozusagen dass:

    mach 1
    mach 2

    musst du umgekehrt ausführen

    mach 2
    mach 1

    Jedoch nicht die Events
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Wenn ich den Wegwerf-Code ins Kollisions-Event packe kann ich die Waffe ja nur wegwerfen wenn ich bereits auf dieser stehe.
    und den Waffen-Aufnahme Code ins Step-Event kann ich mir ja überall das Katana herzaubern mit Rechtsklick.

    Müsste ich höchstens noch eine Kollisions-Abfrage direkt ins Step-Event reinschreiben, was das Kollisionsevent selbst doch nutzlos macht, oder? Außerdem müsste ich die Abfrage dann für 20 verschiedene Waffen ins Step-Event packen. Ich glaub ich bin zu blöd und geliefert :(
  • und wieder ein Post von mir :)

    Ok, es lag tatsächlich an der Reihenfolge und ich hab es nun gelöst auch mit Eurer Hilfe, danke.
    Ich werde wohl für jede Eventualität einen Code machen.

    Ich habe nun 2 Scripte angelegt, eines zum Aufheben der Waffe(PickUpWeapon) und eines zum wegwerfen der Waffe(ThrowingWeapons). Sowie je ein extra "Werf-Objekt" für jede Waffe.

    Im Stepevent des Spielers werden diese nun nacheinander ausgeführt wenn die rechte Maustaste gedrückt wird:

    Quellcode

    1. ​ // Wenn rechte Maustaste gedrückt wird, wirft der Spieler die genutzte Waffe weg
    2. if mouse_check_button_pressed(mb_right)
    3. {
    4. script_execute(ThrowingWeapons)
    5. script_execute(PickUpWeapon)
    6. }


    als erstes wird nun weggeworfen und dann erst aufgenommen.

    ThrowingWeapons - Script:

    Quellcode

    1. ​if global.weapon == 1
    2. // Wenn rechte Maustaste gedrückt wird, wirft der Spieler die genutzte Waffe weg
    3. {
    4. my_id = instance_create (x,y,objWeapon01Throw) // die Waffe wird direkt beim Spieler neu erstellt
    5. my_id.speed = 10 // die Geschwindigkeit, mit der die Waffe geworfen wird
    6. my_id.direction = point_direction(x,y, mouse_x, mouse_y) // Bestimmt die Richtung, in der geworfen wird (hier: Mauszeiger)
    7. my_id.image_angle = my_id.direction // die Ausrichtung des Objekts, hier zeigt es in Richtung des Mauszeigers
    8. global.weapon = 0
    9. }
    10. if global.weapon == 2
    11. // Wenn rechte Maustaste gedrückt wird, wirft der Spieler die genutzte Waffe weg
    12. {
    13. my_id = instance_create (x,y,objWeapon02Throw) // die Waffe wird direkt beim Spieler neu erstellt
    14. my_id.speed = 10 // die Geschwindigkeit, mit der die Waffe geworfen wird
    15. my_id.direction = point_direction(x,y, mouse_x, mouse_y) // Bestimmt die Richtung, in der geworfen wird (hier: Mauszeiger)
    16. my_id.image_angle = my_id.direction // die Ausrichtung des Objekts, hier zeigt es in Richtung des Mauszeigers
    17. global.weapon = 0
    18. }
    Alles anzeigen



    PickUpWeapon - Script:

    Quellcode

    1. ​// Katana aufnehmen
    2. if instance_position(x,y,objWeapon01)
    3. {
    4. with objWeapon01 instance_destroy()
    5. global.weapon = 1
    6. }
    7. // Vorschlaghammer aufnehmen
    8. if instance_position(x,y,objWeapon02)
    9. {
    10. with objWeapon02 instance_destroy()
    11. global.weapon = 2
    12. }
    Alles anzeigen



    Ich hoffe es ist ok, das ich das hier reinschreibe. Ich dachte der Vollständigkeit halber packe ich meinen Ansatz hier rein, vielleicht hilft es ja doch mal jemanden weiter.


    Eine Frage dazu habe ich aber noch. Wird das 2. Script erst ausgeführt wenn das erste durch ist oder starten die nun fast zeitgleich und laufen quasi parallel? Wenn parallel, könnte es da Komplikationen geben je mehr ich die Scripte mit Waffen fülle? Also das die sich dann irgendwie überschneiden?


    VG

    Knorke
  • gut, habe aber gerade ein weiteres Problem entdeckt :(

    Wenn ich meine Waffe abwerfe und die zufällig auf eine andere am Boden liegende landet, dann nehme ich beim PickUpWeapon Script beide gleichzeitig auf. Ich trage dann zwar nur eine aber beiden verschwinden vom Boden. Da hat man mal ne Lösung für ein Problem gefunden... dauerts nicht lang und man hat was neues ^^