Welches Objekt habe ich vor mir?

  • GM 7

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

  • Welches Objekt habe ich vor mir?

    Hallo,

    ich arbeite gerade an meinem ersten Spiel, einem Sokoban-Klon mit erweiterten Features. Ich möchte gerne wissen, welches Objekt sich vor meinem Spieler befindet, um dann darauf reagieren zu können. Ist es z.B. ein Block, möchte ich ihn verschieben, ist es aber ein Diamant, möchte ich ihn einsammeln. Ich kann zwar die ID des vor mir befindlichen Objekts herausfinden, aber wie erfahre ich mit GML, zu welchem Objekt diese ID gehört? Ich würde dann nämlich in einer switch-Anweisung auf die verschiedenen Objekte reagieren.

    Gruß,
    Terrance
  • Der Diamant wäre doch einfacher zu regeln mit collision o.o

    im Collision Event des Spielers mit >Diamant< Punkte erhöhen und was auch immer. Am Ende nich vergessen:

    GML-Quellcode

    1. with(other)
    2. {instance_destroy();}


    Den Block kann man auch mit kollision lösen denke ich.

    Vllt mit:

    [Collision Event >Stein<]

    GML-Quellcode

    1. if(direction=point_direction(x,y,other.x,other.y)//wenn in Richtung Stein schaut (läuft gegen)
    2. {other.direction=direction;
    3. other.speed=speed;}


    Vllt noch mit nem Alarm das anhalten des Steins veranlassen. Ansonsten evtl im Stein Step Event sowas:

    GML-Quellcode

    1. if(!place_meeting(x+sprite_width,y,obj_player))&&//Rechts kein Player
    2. (!place_meeting(x-sprite_width,y,obj_player))&&//Links kein Player
    3. (!place_meeting(x,y+sprite_height,obj_player))&&//Unten kein Player
    4. (!place_meeting(x,y-sprite_height,obj_player))//Oben kein Player
    5. {speed = 0}//Dann speed auf 0 setzen


    EDIT: Ok das war mal wieder viel Text um nix o.o
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Hab ich schon, da bekomm ich aber nur ein <undefined> zurück. Mein Code diesbezüglich sieht im Moment so aus:
    (xx,yy ist die Position des Spielers + die nächste Position, in die er gehen möchte).

    GML-Quellcode

    1. ind = instance_place(xx,yy,all);
    2. obj = object_get_name(ind);
    3. switch (obj)
    4. {
    5. case 'objHeart' :
    6. //Mach was verrücktes mit dem Objekt Heart
    7. break;
    8. case 'objKey' :
    9. //Mach was verrücktes mit dem Objekt Key
    10. break;
    11. .
    12. .
    13. .
    14. }
    Alles anzeigen

    Als ind bekomm ich entweder -4 zurück (dann ist das Feld vor mir leer), oder die ID des Objekts. Aber egal, was ich probiere, obj ist immer leer.
  • Terrance schrieb:

    Hab ich schon, da bekomm ich aber nur ein <undefined> zurück. Mein Code diesbezüglich sieht im Moment so aus:
    (xx,yy ist die Position des Spielers + die nächste Position, in die er gehen möchte).

    GML-Quellcode

    1. ind = instance_place(xx,yy,all);
    2. obj = object_get_name(ind);
    3. switch (obj)
    4. {
    5. case 'objHeart' :
    6. //Mach was verrücktes mit dem Objekt Heart
    7. break;
    8. case 'objKey' :
    9. //Mach was verrücktes mit dem Objekt Key
    10. break;
    11. .
    12. .
    13. .
    14. }
    Alles anzeigen

    Als ind bekomm ich entweder -4 zurück (dann ist das Feld vor mir leer), oder die ID des Objekts. Aber egal, was ich probiere, obj ist immer leer.
    Wow, ganz ehrlich ich hab keine Ahnung wo der GM da ein Problem hat, hast du mal versucht obj überm player zeichnen zu lassen? Oder hast du im debug geschaut?
    Ich kann mir nicht erklären warum obj leer sein sollte/könnte.

    Ansonsten kannst du glaube ich den Schritt mit obj=obj_get_name(ind) überspringen und direkt switch(obj_get_name(ind)) machen, vielleicht geht das.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Nein, leider hilft das nicht.

    Natürlich hast du recht, ich hätte mir das auch sparen können, aber ich hab das gemacht, um zu testen, was in obj drin ist. ;)

    Also ind hat die ID des Zielobjekts(in diesem Fall 100223). Gibt es denn keine Möglichkeit, den Objektnamen einer bestimmten ID herauszufinden?
  • So ähnlich müsste es mit einem Workaround gehen:


    GML-Quellcode

    1. obj = instance_place(xx,yy,objHeart);
    2. if(instance_exists(obj) {
    3. ...
    4. }
    5. obj = instance_place(xx,yy,objKey);
    6. if(instance_exists(obj)) {
    7. ...
    8. }



    Klar mit einem Switch wäre das schöner aber wenn du bisher keine Möglichkeit gefunden hast müsste das hier gehen.