Wie kann man das ermitteln?

  • GM 8

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

  • Wie kann man das ermitteln?

    Hey Leute,

    ich hätte da auch noch mal eine Frage: Wie kann man ermitteln, auf welches Object gerade die Maus zeigt, wenn
    a) es ein "normales" Objekt ist und
    b) alle Objekte ein parent haben?

    ich bekomme das nicht raus. mouse_x und mouse_y sind klar, aber wie erfahre ich das object??
    Vielleicht kann mir da jemand weiterhelfen. ALs Code wenn möglich, nicht D&D. 8)
    Danke, CB
  • einfach das hier als skript (z.b. scr_mouse_col()) erstellen:

    GML-Quellcode

    1. var i, ret;
    2. ret = -1;
    3. i = 0;
    4. do {
    5. if (position_meeting(mouse_x,mouse_y,instance_id[i])) {
    6. ret = instance_id[i];
    7. }
    8. i += 1;
    9. } until (i >= instance_count || ret != -1)
    10. return ret;


    das Skript gibt dann die Id der Instanz wieder, die die Maus berührt. Wenn keine instanz die Maus berührt, wird -1 zurückgegeben. Wenn mehr als eine Instanz die Maus berühren, wird die kleinste ID zurückgeben.

    Ich hab das nicht überprüft, also wenn fehler auftreten, gib bescheid!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von J@kob ()

  • J@kob schrieb:

    Ich hab das nicht überprüft, also wenn fehler auftreten, gib bescheid!
    Jep, danke für die schnelle Antwort. Aber irgendwas stümmt da net: Ich bekomme zwar eine id geliefert, aber irgendwie nicht die richtige...
    Da die Objekte mehrfach vorhanden sind, bekomme ich interne id, wobei gml die offenbar durchzählt. So habe ich niemals ein Objekt mit der id 100228 erstellt, erhalte aber diese Nummer u.a. Das hilft mir aber nicht, das objekt zu ermitteln, auf das gezeigt wird, das müsste irgendwie schon genauer sein...
    Vielleicht rufe ich es aber auch nur falsch auf? Ich hab das Script "mouse_zeiger" gemacht und rufe es auf mit "mouse_object = script_execute(mouse_zeiger)". Falsch? <
    Auch wird die Bedingung "until i >= instance_count" nie erreicht, da i ja immer nur den Wert 1 liefert... (?)

    CAS schrieb:

    Spricht was gegen dies hier?
    Weiß ich noch nicht, muß ich mal eben testen gehen :) Melde mich dann später noch mal. thx schon mal vorweg!
    Gruss CB

    Da bin ich wieder. Sorry, auch hier bekomme ich keine id, sondern nur eine Fehlermeldung. Nimmt man das ".object_index" jedoch in die Klammer hinein, dann kommt keine Fehlermeldung mehr. Allerdings bekomme ich dann als Wert nur noch 0 oder 1 geliefert...
    CB

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Counter-Bike ()

  • mein Skript hat nur auf einem umständlichen weg das getan, was position_meeting(mouse_x, mouse_y, all) macht (CAS zeigt wieder den billigen weg auf ;))

    was du suchst ist glaube ich das hier (da du mit den ids anscheinend noch nicht klarkommst):

    GML-Quellcode

    1. object_get_name(position_meeting(mouse_x,mouse_y,all).object_index);
    das liefert dir den namen des betroffenen Objektes und nicht seine ID.

    Edit: die Bedingung wird erfüllt, da i mit jedem durchlauf um 1 erhöht wird.
  • Boah, ich krieg gleich ne Krise! Mit der Anweisung bekomme ich jetzt zwar das Object angezeigt - aber nur "obj_gegner" - nicht aber, WELCHER Gegner! Die haben alle dasselbe Grund-Objekt bei mir, unterscheiden sich aber in den Sprites. Jetzt weiß ich immer noch nicht, welcher Gegner nun angeklickt wurde :-(( Das blöde ist, daß der dann mit einem anderen den Platz tauschen soll - aber natürlich nicht mit demselben!

    Hätte ja nicht gedacht, daß das so schwierig ist, das rauszufinden...
    und nein, ich kenne mich mit den id nicht so aus, dachte eigentlich, da bekommt man die id geliefert, die das object nun mal hat, aber dem ist ja vermutlich nicht so. *seufz*

    Trotzdem danke für die Hilfe, auch wenn ich immer noch nicht weiter bin. :(
    CB
  • Die ID vom Objekt wo draufgeklickt wurde kriegst du so:
    In dass Step-Event von z.B obj_con (also der controller) fügst du das ein:

    GML-Quellcode

    1. instance_position(mouse_x,mouse_y,all)

    instance_position(mouse_x,mouse_y,all) gibt die ID von dem Objekt zurück worauf die Maus ist (mouse_x,mouse_y) und all
    sagt, dass alle Objekte im Raum darauf geprüft werden, ob die Maus auf ihnen ist.
  • Ja, also, danke erst mal für die viele Hilfe hier. Finde ich ganz toll. Irgendwie bin ich jetzt aber ein bisschen durcheinander.
    Eine Frage bleibt nach dem - für mich jetzt Code-Chaos - übrig:

    Wenn ich die ids ermitteln kann, was ja durchaus vorkam zwischendurch, was habe ich davon, wenn es nur die ids der Instancen sind, nicht aber die der Objekte? Ich meine, jede id kommt ja nur einmal im Spielfeld vor, ganz gleich, wieviele Instancen ein und desselben Objektes jetzt da sind. Wenn man nun diese Instancen-id hat - was kann man damit machen? Gibt es da einen weiteren Schritt, um beispielsweise Objekte miteinander abzugleichen?

    hoffentlich hab ich mich jetzt verständlich ausgedrückt. Ich meine, wenn ich 3 mal dasselbe Objekt habe, aber jedes Objekt eine andere id bekommt - wie kann ich dann wissen, ob das Objekt auf dem Platz, wo die Maus hinzeigt, dasselbe ist wie das Objekt links oben in der Ecke...?
    Drücke mich manchmal etwas umständlich aus, aber ich hoffe, es hat einer verstanden.
    Grüsse CB