Objekte übereinander nicht anklicken

  • GM 8

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

  • Objekte übereinander nicht anklicken

    Ich habe schon mit der Suchfunktion geschaut, aber die passende Antwort nicht gefunden:
    Ich habe 2 Objekte mit verschiedenen Depth angelegt, damit bewusst das eine Objekt unter das andere Objekt geschoben wird, wenn die kollidieren. Tun sie auch, das eine Objekt "versteckt" sich also unter dem darüberliegenden.
    Trotzdem kann der Spieler - der das untere Objekt nun nicht sehen kann - dieses Objekt noch anklicken, wenn er auf gut Glück alles abklickt. Das möchte ich vermeiden. Objekte, die kurz unter anderen Obkjekten verschwinden, soll der Spieler nicht anklicken können. Nur: wie kann ich das machen? Finde keinen Befehl, der das macht und "unvisible" möchte ich sie nicht machen.
    Danke schon mal für den passenden Hinweis,
    Archie

    PS: An den Moderator: die erste Anfrage gleichen Inhalts ist versehentlich im falschen Unterforum gelandet, sorry. War keine Absicht. Bitte löschen. Danke.

    Weiss es wirklich niemand, wie man verhindert, dass der Spieler Objekte, die er eh nicht sehen kann, anklicken kann? Also normalerweise muss er die anklicken können, nur eben nicht, wenn sie sich gerade "verstecken"...
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:

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

  • Da hier längere Zeit keiner geantwortet hat, mach ich das mal :)

    Wenn ich Deine Frage richtig verstanden habe, dann könnte man das Ganze so lösen:

    GML-Quellcode

    1. //step event vom unteren objekt:
    2. if mouse_check_button_pressed(mb_left)
    3. {
    4. if position_meeting(x,y,obj_über_mir)
    5. {
    6. exit;
    7. }
    8. else
    9. {
    10. //führ ganz normal die aktionen aus.
    11. }
    12. }
    Alles anzeigen
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Ich würde eine eigene Depth-Variable benutzen. Als Beispiel nenne ich sie einfach global.tiefe. Die Variable könntest du jedes Mal wenn ein neues Objekt erstellt wird um 1 erhöhen und dem neu erstellen Objekt zuweisen.
    Erstelle ein Controller-Objekt:

    GML-Quellcode

    1. //Im Create-Event
    2. global.tiefe=0;
    3. zielTiefe=0;
    4. zielObjekt=id;
    5. //Ins Step-Event:
    6. if (mouse_check_button_pressed(mb_left))
    7. {
    8. zielTiefe=0; //Zieltiefe für die nächste Prüfung zurücksetzen
    9. zielObjekt=id; //ZielObjekt für die nächste Prüfung zurücksetzen
    10. with (objekt) //Die Objekte, für die die Tiefe geprüft wird, wenn du viele unterchiedliche Objekte hast, mache ein Parent-Objekt und schreibe dieses in die Klammern
    11. {
    12. if (position_meeting(mouse_x,mouse_y,self)) //Prüft, ob sich die Maus über dem zu prüfenden Objekt befindet
    13. {
    14. if (tiefe>other.zielTiefe) //Das höchste Objekt herausfiltern
    15. {
    16. other.zielTiefe=tiefe;
    17. other.zielObjekt=id;
    18. //Beim Klick auf ein Objekt, wird dieses automatisch zum obersten
    19. //global.tiefe+=1;
    20. //tiefe=global.tiefe;
    21. //depth=-tiefe;
    22. }
    23. }
    24. }
    25. }
    Alles anzeigen

    In deinen verschiebbaren Objekten musst du ins Create-Event folgendes schreiben:

    GML-Quellcode

    1. global.tiefe+=1;
    2. tiefe=global.tiefe;
    3. depth=-tiefe;

    Setze erst das Controller-Objekt in deinen Room und anschließend die anderen Objekte. Von nun an wirst du beim Mausklick auf einen Stapel von Objekten immer nur das oberste erhalten.
    Die ID des obersten Objektes ist im Controller-Objekt als "zielObjekt" bekannt.
    Wenn du noch folgendes ins Step-Event anhängst:

    GML-Quellcode

    1. if (mouse_check_button(mb_left))
    2. {
    3. zielObjekt.x=mouse_x;
    4. zielObjekt.y=mouse_y;
    5. }
    6. else zielObjekt=id;

    ...Kannst du jeweils die obersten Objekte verschieben.
    Ich habe es übrigens selbst getestet und es funktioniert! Ich hoffe ich konnte dir damit helfen

    "Make love, not Warcraft"

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von HuRr!cAnE ()