FATAL ERROR nach dem Tod

    • GM 8
    • FATAL ERROR nach dem Tod

      Hey,

      ich habe eine Problem bei meinem 2D Jump and Run Game und zwar, immer wenn ich das erste Level bestanden habe und dann ins zweite komme und dort sterbe kommt folgende Meldung:
      ___________________________________________
      ############################################################################################
      FATAL ERROR in
      action number 1
      of Step Eventspieler
      for object phone:

      Moving to next room after the last room.
      at gml_Object_phone_CollisionEvent_1 (line 11) - room_goto_next()
      ############################################################################################

      Meines Erachtens will das Game mich nach meinem Tod in das nächste Level packen (welches auch vorhanden wäre), obwohl im Fall eines Tods der Spieler mit game_load("game.save") wieder zum letzten Speicherpunkt soll.
      In Level eins geht alles ohne Probleme und so auch wenn ich von Level zwei aus starte aber sobald ich ein Level bestanden habe, darf ich im nächsten nicht sterben, ohne ein Error zu bekommen.
      Ich habe alles doppelt und dreifach durchsucht aber ich finde den Fehler nicht!
      Ich habe mal versucht ob es hilft wenn ich um room_goto_next() einfach eine if-Abfrage mache, ob da überhaupt noch ein Level ist, also:

      if room_exists(room_next(room))
      room_goto_next()

      Dann kommt zwar kein Error mehr, wenn ich im zweiten Level sterbe, allerdings komme ich dann nach dem Tod sofort ins nächste Level, obwohl ich ja im Fall des Todes mit game_load("game.save") eigentlich vom Speicherpunkt gestartet werden müsste.

      Hat jemand ne Idee wo der Fehler sein könnte bzw. was helfen kann ?
    • Erstmal Wilkommen :).
      Zuerstmal passt dieses Thema nicht in der Expertenrunde, eher zu den Technischen Fragen!
      Zunächst hast du die ganze Abfrage falsch geschrieben!
      So geht es Richtig:

      GML-Quellcode

      1. if room_exists(room_next(room))
      2. {
      3. room_goto_next();
      4. }

      Du hast die { } für die IF Schleife vergessen, und für eine normalen befehlausführung hast du das ; vergessen!
      Falls dies nicht geht hau die if Abfrage raus und lass nur room_goto_nex(); da weil du ehrlich gesagt die Abfrage überhaupt nicht brauchst!
      (Wäre für andere Dinge gedacht)
      Und bitte das nächstes mal das Thread in den Technischen Fragen posten!
      Danke :)!

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Luan ()

    • Ich denke nicht, dass die if - abfrage unnötig ist.

      Ich verstehe nur nicht, warum der Spieler überhaupt den Raum wechseln soll, wenn er sowieso am Speicherpunkt (ich nehme an; das ist sowieso immer ein Punkt im aktuellen room?) starten soll.

      Das Problem liegt laut der Fehlermeldung in einem Kollisionsevent, poste doch mal den Code on Obj_phone und den Step Code vom Spieler, dann können wir uns das genauer ansehen.

      Und als erstes hätte ich auf etwas in der savedatei getippt, das verhindert, dass du am richtigen ort respawnst, weil du dazwischen den Raumwechsel hast und vielleicht in einem create event die savedatei umgeschrieben wird? und er dann nicht mehr dorthin kann wo er eigtl hinwollte. Aber ich denke, dann sähe die Fehlermeldung anders aus.

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    • ok, danke @Luan!

      Hier sind die Datein, allerdings habe ich bei phone nur ein Collisions Opjekt.
      Dateien
      • Spieler.txt

        (1,74 kB, 140 mal heruntergeladen, zuletzt: )
      • phone.txt

        (203 Byte, 142 mal heruntergeladen, zuletzt: )

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

    • Hab mir das mal genauer durchgelesen und einige Zeichen hinzugefügt und einige Fehler verbessert!
      Falls noch ein Fehler vorhanden ist, bitte melden!

      Download ist leider nicht da(sorry aber da ist ein fehler bei schreibeditor wo ich auf dateianhänge nicht klicken kann:

      Spieler.txt:

      GML-Quellcode

      1. hspeed = 0;
      2. if keyboard_check(vk_right)
      3. {
      4. hspeed += 7;
      5. laspressed = "right";
      6. }
      7. if keyboard_check(vk_left)
      8. {
      9. hspeed -= 7;
      10. laspressed = "left";
      11. }
      12. if keyboard_check_pressed(vk_space) && global.item1 > 0 && global.item1 > 0 && instance_exists(powerschild) == false
      13. {;
      14. global.item1 -= 1;
      15. instance_create(x,y,powerschild);
      16. }
      17. if place_free(x,y+10)
      18. {
      19. if laspressed == "right";
      20. sprite_index = sprite8;
      21. else
      22. sprite_index = sprite9;
      23. }
      24. else
      25. {
      26. if laspressed == "right";
      27. {
      28. sprite_index = sprite0;
      29. }
      30. else
      31. {
      32. sprite_index = sprite4;
      33. }
      34. }
      35. if place_free (x+hspeed,y) == false
      36. {
      37. if hspeed > 0
      38. {
      39. move_contact_solid(0,-1);
      40. }
      41. if hspeed < 0
      42. {
      43. move_contact_solid(180,-1);
      44. }
      45. hspeed = 0:
      46. }
      47. vspeed += 1;
      48. if keyboard_check_pressed(vk_up) && place_free(x,y+10) == false
      49. {
      50. vspeed -= 21;
      51. }
      52. if place_meeting(x,y,leiter) == true
      53. {
      54. if keyboard_check(vk_up)
      55. {
      56. vspeed = -5;
      57. }
      58. else if keyboard_check(vk_down)
      59. {
      60. vspeed = 5;
      61. }
      62. else
      63. {
      64. vspeed = 0;
      65. }
      66. }
      67. if place_free (x,y+vspeed) == false
      68. {
      69. if vspeed > 0
      70. {
      71. move_contact_solid(270,-1);
      72. }
      73. if vspeed < 0
      74. {
      75. move_contact_solid(90,-1);
      76. }
      77. vspeed = 0;
      78. }
      79. if place_free(x+hspeed,y+vspeed) == false
      80. {
      81. hspeed = 0;
      82. }
      83. if keyboard_check_released(vk_up) && vspeed < 0
      84. {
      85. vspeed /= 2;
      86. }
      87. image_index = x/20;
      88. view_xview = ((x-view_wview/2)+view_xview*9)/10;
      89. view_yview = ((y-view_hview/1.5)+view_yview*9)/10;
      90. if view_xview < 0
      91. {
      92. view_xview = 0:
      93. }
      94. if view_yview <0
      95. {
      96. view_yview = 0;
      97. }
      98. if view_xview > room_width-view_wview
      99. {
      100. view_xview = room_width-view_wview;
      101. }
      102. if view_yview > room_height-view_hview
      103. {
      104. view_yview = room_height-view_hview;
      105. }
      Alles anzeigen


      phone.txt :

      GML-Quellcode

      1. if image_speed = 0
      2. {
      3. global.handy += 1;
      4. image_speed = 0.5;
      5. sound_play(phone);
      6. }
      7. if instance_number(phone) <= 1 && room_exists(room_next(room))
      8. {
      9. room_goto_next();
      10. }


      Warnung:
      Es kann einige Fehler geben!
    • Ich glaube ich verstehe langsam wo der Wurm drin ist. Eh wie in der Fehlermeldung ^^

      Ist der zweite Raum dein letzter raum?

      Ich habe noch nie so eine Abfrage nach dem nächsten Raum gemacht. Aber laut Fehlermeldung kommt er nicht zum nächsten Raum. Vielleicht eben weil da gar keiner ist.

      GML-Quellcode

      1. if (instance_number(phone) <= 1 && (room_next(room) == true)
      2. {
      3. room_goto_next();
      4. }
      5. else
      6. {
      7. room_restart();
      8. }

      sollte aber funktionieren.

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    • @Luan jetzt kommt zwar die Fehlermeldung nicht mehr :) aber wenn ich jetzt sterbe oder vom Speicherpunkt starten möchte, steht die Figur zwar richtig aber die Kamera ist an einer anderen Stelle ?(
      Wenn ich laufe bewegt sich die Kamera zwar Synchron mit aber halt versetzt (nach rechts).

      Du haste jetzt immer Semikolons gesetzt, ich habe aber mal gehört/gelesen das man die bei GameMaker gar nicht bzw. kaum braucht. Stimmt das ?

      @Aku_Ryou das war das erste was ich nachgeschaut hatte, es sind aber noch zwei weitere Level da. Es war sogar so, das wenn ich die letzten Level weggenommen habe es funktioniert hat :D nur konnte ich nicht weit laufen, habe es kaum bis zum Ende des Raumes geschafft und wurde dann wieder an den Anfang gesetzt -.-
    • Ja du brauchst keine Semikolons, aber man kann es sich ja für andere Programmiersprachen angewöhnen, weil es den GM ja nicht stört.

      Zu deinen anderen Problemen kann ich dir leider nicht helfen :|
      GML lernen geht leicht :)
      1. http://www.gm-d.de/help/ (deutsch)
      2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
      3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)
    • ah ok, das mit den Semikolon habe ich mir schon gedacht, danke.
      @Luan der View ist ja immer auf den Spieler eingestellt oder war das auf die Screenshots bezogen ? :D
      Bilder
      • Screenshot vor dem Tod.png

        32,03 kB, 1.917×1.029, 146 mal angesehen
      • Screenshot nach dem Tod oder reload.png

        29,59 kB, 1.917×1.027, 154 mal angesehen

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

    • hi. Keine ahnung ob du dein Problem schon lösen konntest, aber:
      { } brauchst du nur wenn du in der if-abfrage mehr als einen Befehl ausführen willst.
      Semikolons interessieren GameMaker nicht. Die kannst du weglassen, solltest du dir aber nicht angewöhnen, da sie in anderen Sprachen benötigt werden.
      dein Fehler ist im Grunde genommen ganz einfach. Du führst room_goto_next aus, obwohl du in deiner room-Hierarchie bereits im letzten room angekommen bist.
      du solltest also entweder wie schon erwähnt prüfen, ob denn noch ein room nach dem derzeitigen room existiert, oderdu nutzt room_goto(room).

      MfG
    • HIM666 schrieb:

      hi. Keine ahnung ob du dein Problem schon lösen konntest, aber:
      { } brauchst du nur wenn du in der if-abfrage mehr als einen Befehl ausführen willst.
      Semikolons interessieren GameMaker nicht. Die kannst du weglassen, solltest du dir aber nicht angewöhnen, da sie in anderen Sprachen benötigt werden.
      dein Fehler ist im Grunde genommen ganz einfach. Du führst room_goto_next aus, obwohl du in deiner room-Hierarchie bereits im letzten room angekommen bist.
      du solltest also entweder wie schon erwähnt prüfen, ob denn noch ein room nach dem derzeitigen room existiert, oderdu nutzt room_goto(room).

      MfG

      Du, der BEitrag war vom Februar ;) Ich denke das Problem hats ich schon erledigt. Obwohl ich genau das auch gedacgt habe, was du geschrieben hast. Allerdings ist man mit geschweiften Klammern immer auf der sicheren Seite!