Variable wird nicht erkannt

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

  • Variable wird nicht erkannt

    Hallo gm-d Community,

    ich zweifel mal gerade wieder, eigentlich kann es nicht an mir liegen, sondern an Game Maker, aber vielleicht überseh ich irgendwas...

    Habe ein Object "obGrenadeItem", dass im Create Event eine Variable mit schuss = 1 hat.

    In meinem Spieler Object habe ich folgenden Kollisions-Code:

    GML-Quellcode

    1. // Grenade
    2. if(position_meeting(x, y, instance_nearest(x, y, obGrenadeItem)) && instance_nearest(x, y, obGrenadeItem).image_alpha >= 1){
    3. parent.grenade_schuss += instance_nearest(x, y, obGrenadeItem).schuss;
    4. audio_play_sound(sndSwitchWeapon, 1, false);
    5. with (instance_nearest(x, y, obGrenadeItem)){ instance_destroy(); }
    6. }


    Wenn ich das Item nun über den Editor im Raum platziere, und ich es aufsammeln will kommt folgende Fehlermeldung:

    GML-Quellcode

    1. ___________________________________________
    2. ############################################################################################
    3. FATAL ERROR in
    4. action number 3
    5. of Step Event0
    6. for object obHuman:
    7. Variable obGrenadeItem.schuss(100029, -2147483648) not set before reading it.
    8. at gml_Object_obHuman_StepNormalEvent_3 (line 51) - parent.grenade_schuss += instance_nearest(x, y, obGrenadeItem).schuss;
    9. ############################################################################################


    Wenn ich eine Granate, die ich besitze wegwerfe, damit sie ein anderer Spieler aufsammeln kann benutze ich folgenden Code:

    GML-Quellcode

    1. if(weapon = "grenade"){
    2. created_item = instance_create(x + lengthdir_x(radius / 2, direction), y + lengthdir_x(radius / 2, direction), obGrenadeItem);
    3. created_item.direction = direction;
    4. created_item.schuss = 1;
    5. grenade_schuss -= 1;
    6. created_item.speed = throw_speed + 3;
    7. created_item.image_alpha = 0;
    8. audio_play_sound(sndThrowWeapon, 1, false);
    9. throw_speed = 0;
    10. exit;
    11. }
    Alles anzeigen


    Dieses Item kann ich dann Problemlos aufsammeln.


    Ich habe herausgefunden, dass der Grund für das ausbleiben der Fehlermeldung folgender Code beim wegwerfen einer eigenen Granate ist:

    GML-Quellcode

    1. //created_item.schuss = 1;


    Aber wenn ich das weglasse, sollte schuss doch trotzdem ganz normal im Create-Event erstellt sein.
    Ich versteh die Welt nicht mehr. Woran kann das liegen?


    Besten Dank und viele Grüße,
    Shari
    Dieser Beitrag wurde bereits 1909 mal editiert, zuletzt von »Sharivari« (Morgen, 19:89)
  • Mir als unbedarftem Neuling fiele da nur ein im Create-event zu Debugging-zwecken eine Globale mit dem Wert von schuss zu beladen, um zu sehen ob das Create-event korrekt durchlaufen wird.
    Die globale dann testweise in deinem Drawevent mit ausgeben lassen, dann siehst Du ob da was passiert ist. Wenn ja muss der Fehler später liegen, und du musst eine neue "Marke" zum Check setzen.

    Sollte dies wegen integrierter Debugging-Mechanismen unangebracht sein bitte ich um Entschuldigung, ich bin noch zu neu mit dem Studio um da Überblick zu haben, daher nur generalisierte Lösungsvorschläge :)

    EDIT: Ich guck mich grade in den Debugger ein, da hast Du ja deutlich komfortablere Möglichkeiten. Pausiere mal bevor Du die Granate aufnehmen willst und schau dir die Objektinstanzen im Debugger an.
    EDIT2: Supi, der Debugger ist ja schon recht mächtig. Setz einfach mal im Code mit F9 einen Breakpoint in die Zeile wo der Wert gesetzt werden soll und lass das Program laufen, dann siehst Du ja ob Create passend aufgerufen wird :)


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

  • Hab ich schon versucht, das Create-Event wird einfach nicht ausgeführt, keine Ahnung wieso.
    Benutze GM:S allerdings noch nicht so lange, vielleicht muss wieder irgendwo ein Haken gesetzt werden, kann ich mir aber nicht vorstellen.

    Hab jetzt im Room-Editor im Creation-Code für das Objekt einfach die Variable initialisiert.
    Wozu ist dieser Creation-Code eigentlich gut? Hab doch ein Create-Event.

    Oder ist dieser Code dann speziell für den Raum gültig, dann macht es wieder Sinn unter Umständen.

    Gruß,
    Shari
    Dieser Beitrag wurde bereits 1909 mal editiert, zuletzt von »Sharivari« (Morgen, 19:89)
  • Damit Code aus dem Parentobjekt auch ausgeführt wird, muss besagtes Event im Child leer sein. Sollte trotzdem zum Childcode der Parentcode ausgeführt werden, muss event_inherited() im Childevent ausgeführt werden.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Create Event???


    obGrenadeItem.schuss=0???


    Variable obGrenadeItem.schuss(100029, -2147483648) not set before reading it.
    Die variable wurde noch nicht gesetzt im step event.....

    obGrenadeItem.schuss da ist das fehler
    created_item.schuss setzt du das auf 1




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