if array exists?

  • if array exists?

    hi,

    ich bin grade dabei ein inventar mit arrays zu lösen

    jedes Objekt hat eine Nummer
    wenn mann die Objekte kombiniert
    wird das daraus resultierende Objekt wie folgt gefunden:

    GML-Quellcode

    1. kombi[102,103]=104;
    2. obj[102]=obj_apfel;
    3. obj[103]=obj_stein;
    4. obj[104]=obj_matsch;

    beim Kombinieren:

    GML-Quellcode

    1. instance_create(x,y,obj[kombi[102,103])


    jetzt kann man aber nicht jedes objekt mit jedem kombinieren

    Frage: gibt es sowas wie:

    GML-Quellcode

    1. if(array_exists(kombi[102,103])]
    2. instance_create(x,y,obj[kombi[102,103]])
    3. else
    4. show_message("nix is")


    thx schonmal

    @WA:
    mit: variable_local_exists(kombi[102,103])
    gehts nicht...

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

  • sorry hatte mich vertippt:
    das hatte mir WA auch schon geraten
    geht aber irgendwie nicht

    edit:
    irgendwie muss ich mich da nochmal reindenken und das bisl probieren
    könnte vlt doch gehen

    edit2:
    ich komm mir irgendwie dumm vor
    vlt bin ich das auch :(
    aber warum geht das hier nicht:
    Dateien
    • test.zip

      (88,07 kB, 112 mal heruntergeladen, zuletzt: )

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

  • @Bl@ckSp@rk:
    geht nicht (arrays müssen ja auch nicht erst erstellte werden)
    @iTeM:
    Für die kombinierbaren items kannst du ja 'normale' Variablen verwenden oder einen eingenen Array anfangen, welche Objekte man schon eingesammelt hat, zb
    if (kombi[102,103] == 104) {
    instance_create(x,y,obj_matsch);
    obj[102] = 0;
    obj[103] = 0;
    }
    Vielleicht musst du dann dein restliches Skript etwas umschreiben, da ich den array nur belege, wenn da obj eingesammelt ist, wenn nicht dann wird er auf 0 gestellt.

    -gn
    Kaldor - Das erste echte MMORTS
  • Ich habe mir die Zip im Anhang mal geladen und du hast einen gravierenden Fehler gemacht. Die Variable in der Klammer muss in Anführungsstriche gesetzt werden^^

    z.B. if variable_local_exists("test")

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

  • ah..
    thx Marv1

    OK
    if variable_local_exists("test")
    geht wirklich nicht

    @GamerNet:
    wie meinen?

    bei deiner methode müste ich für jedes erzeugbare objekt eine if schleife schreiben
    das klingt nicht so positiv


    was mir grade noch einfällt:
    wenn ich die errors unterdrücke
    und dann
    if(error_occurred)
    mache?
  • bei deiner methode müste ich für jedes erzeugbare objekt eine if schleife schreiben
    das klingt nicht so positiv

    ^^Stimmt. Kommt aber darauf an, wieviele objs das sind. Wobei du n deinem Falle für jedes Obj Arrays kreieren musst. In beiden Fällen kann aber ein for-Loop seeeehr hilfreich sein :D

    was mir grade noch einfällt:
    wenn ich die errors unterdrücke
    und dann
    if(error_occurred)

    Pfusch. und bei dem debugging sicher nicht nützlich

    eigentlich weiß ich auchh nicht mehr weiter. aber vlt. über die nacht.

    -gn
    Kaldor - Das erste echte MMORTS
  • mir fällt noch ne möglichkeit ein. du nimmst für die zweidimensionalen Arrays "normale" Variablen die folgendermaßen aufgebaut sind:

    kombi_index1_index2

    Denn mit den variable_ Funktionen kannst du Variablennamen auch zusammensetzen.
    Der Code sieht dann folgendermaßen aus:

    GML-Quellcode

    1. kombi_102_103=104;
    2. obj[102]=obj_apfel;
    3. obj[103]=obj_stein;
    4. obj[104]=obj_matsch;

    GML-Quellcode

    1. instance_create(x,y,obj[kombi_102_103]);

    GML-Quellcode

    1. if (variable_local_exists("kombi_102_103")) {
    2. instance_create(x,y,obj[kombi_102_103]);
    3. } else {
    4. show_message("nix is");
    5. }
  • ^^Und diese Bl@ckSp@rk-Variablen kannst du mit 'nem for-Loop einfach generieren und ausfüllen. Und einfach überprüfen. :D
    Wobei diese B@S@-Methode sehr der von mit genannten ähnelt ;)
    -gn


    PS:Laut der GM-Manual gibt es keine Array-Test Funktion (...)
    Kaldor - Das erste echte MMORTS
  • PS:Laut der GM-Manual gibt es keine Array-Test Funktion (...)

    schade


    das mit den variablen klappt aber so wie ihr euch das denkt nicht
    der code sieht in wirklichkeit nämlich so aus:

    GML-Quellcode

    1. kombi=global.kombi[inv_nr[global.selected],inv_nr[verwende_mit]];
    2. create=instance_create(0,0,o_mouse);
    3. create.sprite_index=global.item_s[kombi];


    na ja vlt finde ich oder jemand anders ja noch ne lösung :)
  • So wie der Code aussieht ist doch unsere Variante sehr wohl möglich, nämlich so:

    GML-Quellcode

    1. if (variable_global_exists("kombi_"+string(inv_nr[global.selected])+"_"+string(inv_nr[verwende_mit]))) {
    2. kombi=variable_global_get("kombi_"+string(inv_nr[global.selected])+"_"+string(inv_nr[verwende_mit]));
    3. create=instance_create(0,0,o_mouse);
    4. create.sprite_index=global.item_s[kombi];
    5. }


    Musst eben wie gesagt alle 2D Arrays umstellen von

    global.kombi[??,??]

    auf

    global.kombi_??_??
  • Du könntest höchstens variable_local_array2_get(name,ind1,ind2) verwenden. Das gibt den Wert des Eintrages zurück und wenn dieser nicht existiert eine 0. Allerdings kannst du dann nicht mehr die 0 als möglichen Inhalt des Arrays benutzen.

    Dann sowas in der Art von

    GML-Quellcode

    1. if(variable_local_array2_get("kombi",102,103)){
    2. instance_create(x,y,obj[kombi[102,103]])}
    3. else{
    4. show_message("nix is")}
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Benutzer online 1

    1 Besucher