Variable Problem

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

  • Variable Problem

    Ic hhabe (wie öfters) ein Problem in GML.

    Ich habe da folgenden Code:

    Quellcode

    1. var f, s;
    2. if (!(file_exists("BGLoadAutorun.cfg"))) {
    3. s = get_open_filename("Bilddateien|*.gif;*.png;*.bmp;*.jpeg;*.jpg", "");
    4. message_alpha(0.7);
    5. //message_background(backg_mess);
    6. if (s == "") exit;
    7. f = file_text_open_write("");
    8. file_text_write_string(f, s);
    9. file_text_close(f);
    10. }
    Alles anzeigen


    Dannach wird das ausgeführt:

    Quellcode

    1. if (file_exists("BGLoadAutorun.cfg")) {
    2. file=file_text_open_read ("BGLoadAutorun.cfg");
    3. file_path = file_text_read_string(file);
    4. sprite_bg = sprite_add(file_path,false,false,false,false,false,0,0);
    5. draw_sprite(sprite_bg,0,-1,0);
    6. file_text_close(file);
    7. }


    Nun das Problem:

    Er sagt mir dass er die Variable "sprite_bg" nicht kennt. Ich bin leider etwas verwirrt, da ich nicht mehr weiss ob ich was am Code verändert habe. Ic hweiss nur dass es funktioniert hat.

    Er Soll ja "sprite_bg" zeichen. Doch er kennt die variable nicht. Was stimmt daran nicht? (Ich habe die Frage sicher schon mal hier gestellt...)
  • GM fehler meiner meinung nach

    Das schein so ein fehler von Gm zu sein. denn solch änlische problem hatte ich auch mal. Wenn die sprite nur durch befehl hinzugefügt werden und nicht druch wie üblich ander seite. Creat sprite und dann laden und bezeichen, spint der gm manchmal. ich hatte das selbe problem mit "mauge's" Packeg tool. sein example hate funtioniert und dann woltle ich das in mein spiel einbauen. zu 100% kopiert (Merge game funtion) aber dann auch bei diesen "sprite_name=sprite_add" hat er aufeinaml nixmehr erkannt.
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • In welchem Event führst du den zweiten Code aus? Und zeig mal bitte die Fehlermeldung, die du erhälst.

    Edit: Probier mal, das Sprite im Create Event zu laden. Alternativ könntest du das Sprite auch im GM schon anlegen (ohne Grafik) und dann durch sprite_replace() ersetzen.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Der 2te Code wird im Room Start Event ausgeführt. Ich habe versucht den Code ins Create event einzufügen, doch es klappte nicht.

    Der Error:

    Quellcode

    1. ___________________________________________
    2. ERROR in
    3. action number 1
    4. of Draw Event
    5. for object obj_controller_Lite_Menü:
    6. Error in code at line 4:
    7. if sprite_exists(sprite_bg){
    8. at position 19: Unknown variable sprite_bg



    Ich weiss einfach nicht weiter.
  • Dann is ja alles Klar. Der Game Maker sagt dir eh alles was du wissen willst. Diese Variable Existiert für ihn nicht. Das heißt normalerweise, das du die Variable in einem Objekt erstellst, und in einem anderen Objekt probierst auf diese zuzugreifen. Da gibt es jetzt einige Möglichkeiten. Mal sehen.

    Globale Variable:
    Die Variable Sprite_BG sollte global sein. Das kannst du folgendermaßen machen:

    GML-Quellcode

    1. globalvar Sprite_bg; //erzeugt eine Globale Variable :3
    2. Sprite_bg = -1;

    Dieser Code gehört in eine Initialisierungsfunktion, welche du z.B. im ersten Raum des Spieles aufrufen kannst. Wichtig ist dabei, das diese Funktion nur ein einziges mal aufgerufen wird. Ich löse das normalerweise so, das ich einen Speziellen Raum erschaffe, welcher nur bein Start des Spieles aufgerufen wird, und danach sofort in den Raum geht, in dem das Spiel beginnt (oder Hauptmenü, whatever). Das würde dann so aussehen:
    Unter Raum->Setting->Creation Code

    GML-Quellcode

    1. globalvar Sprite_bg;
    2. Sprite_bg = -1;
    3. room_goto(ROOM_MainMenu);


    Jetzt sollte die Variable sprite_bg auf jeden Fall existieren.
    ...
  • Die Variable wird doch in einem Objek intialisiert, und dort aufgerufen... oder?

    if (file_exists("BGLoadAutorun.cfg")) {
    file=file_text_open_read ("BGLoadAutorun.cfg");
    file_path = file_text_read_string(file);
    sprite_bg = sprite_add(file_path,false,false,false,false,false,0,0);
    draw_sprite(sprite_bg,0,-1,0);
    file_text_close(file);
    }


    da steht ja: sprite_bg = sprite_add. Dannach wird draw sprie /sprite_bg) eignesetzt. Die wird da intialisiert und auch aufgerufen. oder?
  • Ich dachte, du kommst von selbst drauf :(

    GML-Quellcode

    1. s = get_open_filename("Bilddateien|*.gif;*.png;*.bmp;*.jpeg;*.jpg", "");
    2. message_alpha(0.7);
    3. //message_background(backg_mess);
    4. if (s == "") exit;
    5. f = file_text_open_write(""); // < bist du sicher, dass da "" hin soll?
    6. file_text_write_string(f, s);
    7. file_text_close(f);

    Das wär's dann von mir ... :D
  • :D
    Da sollst du ja auch den Dateinamen der Datei angeben in die geschrieben wird. Also innerhalb der ""
    Ich geb dir ja auch nicht einen Stift und sag du sollst in der Luft schreiben.^^

    © 2008 by Teamgrill Productions
  • Wenn ich es richtig verstanden hab, muss den Skript so aussehen:

    GML-Quellcode

    1. s = get_open_filename("Bilddateien|*.gif;*.png;*.bmp;*.jpeg;*.jpg", "");
    2. message_alpha(0.7);
    3. //message_background(backg_mess);
    4. if (s == "") exit;
    5. f = file_text_open_write("BGLoadAutorun.cfg");
    6. file_text_write_string(f, s);
    7. file_text_close(f);
  • Danke.^^

    Trotzdem. Das Problem besteht weiter: Er kennt die Variable sprite_bg nicht, obwohl es im selben Script vorher intialisiert wird...

    if (file_exists("BGLoadAutorun.cfg")) {
    file=file_text_open_read ("BGLoadAutorun.cfg");
    file_path = file_text_read_string(file);
    sprite_bg = sprite_add(file_path,false,false,false,false,false,0,0);
    draw_sprite(sprite_bg,0,-1,0);
    file_text_close(file);
    }


    Ich überlege auch die ganze zeit wie man das Lösen könnte. Globalvar hilft dabei nichts...