Path problem

  • GM 7

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

  • Hi ich setzte den Code ein um nicht für jeden raum ein neues Objekt erstellen muss.
    Doch der GM nimmt das nicht an. Der Code ist im Create Event unter Execute Code:

    GML-Quellcode

    1. if (room=room1)
    2. {
    3. path_start(path_po001,100,2,absolute)
    4. }
    5. if (room=room2)
    6. {
    7. path_start(path_po002,100,2,absolute)
    8. }


    Wo ist der Fehler?
    Die Pathnamen stimmen, und das if room nimmt er auch, er sagt der fehler ist bei zeile3 und zeile 7
  • Hey,
    ein Fehler ist keine Fehlerbeschreibung.
    Poste mal den Fehler.

    MfG,
    -haiyyu
    Allerdings... trotzdem, fehlt da nicht einfach immer ein Semikolon nach der if-Klammer? Also:

    GML-Quellcode

    1. if (room=room1)
    2. {
    3. path_start(path_po001,100,2,absolute)
    4. }; //<--genau der hier
    5. if (room=room2)
    6. {
    7. path_start(path_po002,100,2,absolute)
    8. }
  • @LoganTheManster: Ich verwende jetzt nicht den bösen fresse-Smiley, aber in der GML ist ein fehlendes Semikolon nach einem Block kein Grund für ne Fehlermeldung.

    @mcsebbi: In welchem Event bzw. wann wird der Variable 'absolute' ein Wert zugewiesen? Vor oder nachdem die Zeile, die den Fehler verursacht, ausgeführt wird? "Befindet" sich die Variable im selben Object?
  • @ Logan: Die Semikolons gehören eigentlich, wenn man sie schon benutzt, direkt hinter die Befehle. Also im Muster:

    GML-Quellcode

    1. if (bedingung){
    2. befehl1();
    3. befehl2(a,b,c);
    4. befehl3(n);
    5. }



    @ Toshiro: Semikola können in GML schon Fehler verursachen - Beispielsweise, wenn man sie bei einem var-Befehl weglässt. Aber auch sonst sollte man sie nach Möglichkeit immer benutzen, weil sonst die Fehermeldungen des Compilers ungenau ausfallen. Mir ist's schon passiert, dass ich eine Fehlermeldung für Zeile 43 angezeigt bekommen hab, obwohl der eigentliche Fehler in Zeile 50 lag. :P

    @ mcsebbi: Du musst immer darauf achten, die aufzurufenden Variablen in einem Event zu definieren, das vor dem ausgeführt wird, in dem die Abfrage stattfindet. Am sichersten fährst du mit dem Create-Event, da dieses nur einmal beim Erstellen der Instanz ausgeführt wird - also vor allen anderen lokalen Events und danach nicht mehr. Am besten isses, du zeigst uns mal die Objekt-Informationen deines "Problemkindes" - der entsprechende Button befindet sich im Objekt-Editor unter den Feldern für "Parent" und "Mask".
  • Irrenhaus3 schrieb:

    @ Toshiro: Semikola können in GML schon Fehler verursachen - Beispielsweise, wenn man sie bei einem var-Befehl weglässt.
    Deshalb hab ich ja auch "nach einem Block" geschrieben. Sicher können sie zu Problemen führen, ein anderes Bsp wären die Semikola im Kopf der Zählschleife. Darüber hinaus gehören sie zu einem guten Programmierstil, wie du schon geschrieben hast.
  • Also ein Bild:
    Bild

    Information des Objektes:
    Information about object: obj_police

    Sprite: spr_police
    Solid: true
    Visible: true
    Depth: 0
    Persistent: false
    Parent: <no parent>
    Mask: <same as sprite>

    Create Event:
    execute code:

    if (room=room1)
    {
    path_start(path_po001,100,2,absolute)
    };
    if (room=room2)
    {
    path_start(path_po002,100,2,absolute)
    }

    Collision Event with object obj_Wand :
    bounce not precisely against solid objects

    Collision Event with object obj_dieb:
    move to a random position with hor snap 0 and vert snap 0

    Collision Event with object obj_door1:
    bounce not precisely against solid objects

    Collision Event with object obj_door2:
    bounce not precisely against solid objects

    Other Event: Outside Room:
    reverse horizontal direction
    reverse vertical direction
  • Ok, anscheinend ist 'absolute' keine Variable :pinch:
    Wenn du willst, dass der Pfad absolute ausgeführt wird, darfst du nicht

    GML-Quellcode

    1. path_start(path_po001,100,2,absolute)
    sondern

    GML-Quellcode

    1. path_start(path_po001,100,2,1)
    schreiben (Nachzulesen in der Hilfe.
  • Hallo

    mcsebbi schrieb:

    falsch

    doch nicht falsch xD

    Nur um es zu vervollstänigen:
    True ist das gleiche wie 1 und false das gleiche wie 0.
    Du kannst anstatt

    GML-Quellcode

    1. a=1;
    2. if (a == true) {
    3. show_message("True!");
    4. }

    auch

    GML-Quellcode

    1. a=1;
    2. if (a == 1) {
    3. show_message("True!");
    4. }

    schreiben.

    Also mit 1 geht es genauso.

    mfg xxskxx
    -
  • ok, neuer fehler:

    Quellcode

    1. ___________________________________________
    2. FATAL ERROR in
    3. action number 1
    4. of Create Event
    5. for object obj_wächter:
    6. COMPILATION ERROR in code action
    7. Error in code at line 3:
    8. path_start(path_wä001,100,2,true)
    9. at position 19: Unexpected symbol.
    Alles anzeigen


    Objektinfo:

    Quellcode

    1. Information about object: obj_wächter
    2. Sprite: spr_wächter 1
    3. Solid: true
    4. Visible: true
    5. Depth: 0
    6. Persistent: false
    7. Parent: <no parent>
    8. Mask: <same as sprite>
    9. Create Event:
    10. execute code:
    11. if (room=room1)
    12. {
    13. path_start(path_wä001,100,2,true)
    14. };
    15. if (room=room2)
    16. {
    17. path_start(path_wä002,100,2,true)
    18. }
    19. Collision Event with object obj_Wand :
    20. bounce not precisely against solid objects
    21. Collision Event with object obj_dieb:
    22. move to a random position with hor snap 0 and vert snap 0
    23. Collision Event with object obj_door1:
    24. bounce not precisely against solid objects
    25. Collision Event with object obj_door2:
    26. bounce not precisely against solid objects
    27. Other Event: Outside Room:
    28. reverse horizontal direction
    29. reverse vertical direction
    Alles anzeigen
  • Danke das war der fehler.

    Eine ganz andere frage:
    Wie kann ich ein Objekt sofern nichts im weg ist zum spieler schicken?
    Also der Polizist soll sobalt er freie sicht hat auf den Spieler los, und wenn der Spieler weg ist (kein freies sichtfeld) soll er wieder
    einen Path nach gehen
    Den Pathcode und einstellungen des Objektes des Polizisten kennt ihr ja.
    WO und wie muss ich es einbauen.
  • Meinst du in etwa so etwas?

    enemy_in_path.zip

    Im Beispiel läuft eine Instanz einen Pfad ab, bis der Spieler in die Sichtweite derselben kommt. Dann läuft sie auf ihn zu, solange er in besagter Sichtweite ist. Wenn die beiden von einer Wand getrennt werden, läuft die feindliche Instanz zurück zu ihrem Startpunkt und läuft wieder ihren gewohnten Pfad ab.
  • Das ist wunderbar, schaffe es allerdings nicht einzubauen.

    Quellcode

    1. Information about object: obj_police
    2. Sprite: spr_police
    3. Solid: true
    4. Visible: true
    5. Depth: 0
    6. Persistent: false
    7. Parent: <no parent>
    8. Mask: <same as sprite>
    9. Create Event:
    10. execute code:
    11. if (room=menue)
    12. {
    13. path_start(path_pomenue,5,2,true)
    14. };
    15. if (room=room1)
    16. {
    17. path_start(path_po001,5,2,true)
    18. };
    19. if (room=room2)
    20. {
    21. path_start(path_po002,5,2,true)
    22. }
    23. attack = 0;
    24. go_back = 0;
    25. path_lastx = x;
    26. path_lasty = y;
    27. path_lastpos = path_position;
    28. go_back_ok = 0;
    29. Step Event:
    30. execute code:
    31. image_angle = direction;
    32. if !(collision_line(x,y,obj_dieb.x,obj_dieb.y,obj_Wand,1,1))
    33. {go_back_ok = 1;
    34. path_end();
    35. mp_linear_step_object(obj_dieb.x,obj_dieb.y,3.5,obj_Wand);
    36. go_back = 0;}
    37. else
    38. {if (go_back_ok = 1)
    39. {go_back = 1;}}
    40. if (go_back = 1) && !((x = path_lastx) && (y = path_lasty))
    41. {mp_potential_step_object(path_lastx,path_lasty,3,obj_Wand);}
    42. else if (go_back = 1) && ((x = path_lastx) && (y = path_lasty))
    43. {path_start(path_room1,3,1,0);
    44. path_position = path_lastpos;
    45. go_back = 0;
    46. go_back_ok = 0;}
    47. Collision Event with object obj_Wand :
    48. bounce not precisely against solid objects
    49. Collision Event with object obj_dieb:
    50. move to a random position with hor snap 0 and vert snap 0
    51. Collision Event with object obj_door1:
    52. bounce not precisely against solid objects
    53. Collision Event with object obj_door2:
    54. bounce not precisely against solid objects
    55. Other Event: Outside Room:
    56. reverse horizontal direction
    57. reverse vertical direction
    Alles anzeigen


    Wand:
    obj_Wand
    SPieler:
    obj_dieb

    Fehler:

    Quellcode

    1. ERROR in
    2. action number 1
    3. of Step Event
    4. for object obj_police:
    5. Error in code at line 3:
    6. if !(collision_line(x,y,obj_dieb.x,obj_dieb.y,obj_Wand,1,1))
    7. at position 48: Unknown variable obj_Wand


    und noch ein Bild:
    Bild
  • Anscheinend wird dein obj_Wand nicht als Objekt erkannt (obwohl auf dem Bild zu sehen ist, dass das so richtig geschrieben ist)... ?(
    Etwa ein Bug im Game Maker? Versuche mal, das Wand-Objekt in obj_wand umzubenennen, sodass es klein geschrieben ist.