Array >= 32000?

  • GM 7
  • Array >= 32000?

    Ich habe ein Problem mit meinem Script.

    Mein Code:

    GML-Quellcode

    1. loadthis=string(argument1)screen_redraw()
    2. i=0found=file_find_first(working_directory+'\'+string(argument0)+'\*.bmp','')
    3. do
    4. {argument0[i]=sprite_add(found,1,0,1,0,1,0,0)
    5. i+=1file_find_next()
    6. }
    7. until (found='')file_find_close()

    Fehlermeldung:

    Quellcode

    1. ___________________________________________
    2. ERROR in
    3. action number 2
    4. of Create Event
    5. for object loading:
    6. In script loaditems:
    7. Error in code at line 7:
    8. argument0[i]=sprite_add(found,1,0,1,0,1,0,0)
    9. at position 12: Array index >= 32000


    Was ist da los?
    <Irrenhaus3>wenn [zensiert] erstmal das sabbeln anfängt, wird sogar ne Sinuskurve linear, um schneller abzuhauen
    <Irrenhaus3>da geht alles in Deckung
  • hey! found ist immer gleich!!
    file_find_next(); gibt die nächste datei WIEDER du must found = file_find_next(); machen!

    found ist immer das erste ergebniss, weil es sich nicht ändert!

    GML-Quellcode

    1. loadthis=string(argument1)screen_redraw()
    2. i=0 found=file_find_first(working_directory+'\'+string(argument0)+'\*.bmp','')
    3. do
    4. {sprite[i]=sprite_add(found,1,0,1,0,1,0,0)
    5. i+=1;
    6. found = file_find_next()
    7. }
    8. until (found='')file_find_close()


    und noch was:
    "argument0[ i]="

    nimm besser ne neue Variable z.b. sprite =
    ich weiß nicht ob argument0 das auch kann.

    So 5 mal bearbeitet... jetzt müsste der code gehn^^
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    Albert Einstein

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

  • Das Problem ist, ich das Script mehrmals ausführe und es immer andere Sachen lädt....
    <Irrenhaus3>wenn [zensiert] erstmal das sabbeln anfängt, wird sogar ne Sinuskurve linear, um schneller abzuhauen
    <Irrenhaus3>da geht alles in Deckung
  • so wie ich den Code verstanden hab soll er in eine Ordner (argument0) alle bmp dateinen als bilder rein laden oder?

    Wo genau ist der Fehler? der von oben liegt daran das (wie gesagt) found nicht aktualisiert wird!
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    Albert Einstein
  • Ich würde dir dazu empfehlen mit ds_list zu arbeiten. Dann brauchst du nur die ID der Liste zu übergeben und dein Script füllt diese dann mit den IDs der sprites.
    Also sowas in der Art wie

    GML-Quellcode

    1. ds_list_add(argument0,sprite_add(found,1,0,1,0,1,0,0));

    und zum aufrufen des Scriptes sowas wie

    GML-Quellcode

    1. bla = ds_list_create();
    2. script(bla,"ordner");
  • so wie ich den Code verstanden hab soll er in eine Ordner (argument0) alle bmp dateinen als bilder rein laden oder?

    Wo genau ist der Fehler? der von oben liegt daran das (wie gesagt) found nicht aktualisiert wird!

    Array >= 32000, siehe oben.


    Ich würde dir dazu empfehlen mit ds_list zu arbeiten
    Ich hab noch nie mit Lists gearbeitet, aber mal schaun. Danke!
    <Irrenhaus3>wenn [zensiert] erstmal das sabbeln anfängt, wird sogar ne Sinuskurve linear, um schneller abzuhauen
    <Irrenhaus3>da geht alles in Deckung
  • Grundproblem ist, dass er mehr als 32000 Array-Elemente anlegt. Das kann der GM nicht. Und ich glaube auch nicht, dass das gewollt ist. Und bei Argumenten würde ich nicht mit einem Array direkt arbeiten, denn dann ballerst du das zwar in dieses argument0 rein, aber nicht in das Array, dass du eigentlich beim Aufruf mit argument0 angibst. Das bedeutet, die ganze Arbeit die du da mit dem Einlesen machst verpufft im Nichts.
    "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
  • NACHMAL: Der fehler ist die unendlich schleife! found ist immer die erste datei!
    und er kann nciht abbrechen, weil found NIE nix ist!

    Schau noch mal bei mir oben!

    EDIT: hier nach mal:

    GML-Quellcode

    1. loadthis=string(argument1)screen_redraw()
    2. i=0 found=file_find_first(working_directory+'\'+string(argument0)+'\*.bmp','')
    3. do
    4. {sprite[i]=sprite_add(found,1,0,1,0,1,0,0)
    5. i+=1;
    6. found = file_find_next()
    7. }
    8. until (found='')file_find_close()
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    Albert Einstein
  • Darum gehts doch gar nicht mehr, das Problem hattest du bereits gelöst. So wie ich das verstanden hab und auch so wie WA erklärt hat, geht es Superyoshi darum, das Array als Variablenparameter übergeben zu können damit er sozusagen vom Script das gefüllte Array zurückbekommt. Der GM bietet sowas nicht direkt, deshalb muss man entweder den Variablennamen als String übergeben und dann mit variable_local_set usw. arbeiten oder eben mein Vorschlag, mit Listen. Da hat man den Vorteil, dass man nur die ID übergeben muss.
  • aso sorry falsch verstanden^^

    Dafür fält mir auch nur das mit der list ein. Benutze dies aber meist nicht!
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    Albert Einstein
  • Es lädt jetzt die Sprites, aber wie kann ich jetzt die Sprites abrufen? Geht bei mir irgendwie nicht.
    <Irrenhaus3>wenn [zensiert] erstmal das sabbeln anfängt, wird sogar ne Sinuskurve linear, um schneller abzuhauen
    <Irrenhaus3>da geht alles in Deckung
  • Wenn du es mit Listen gemacht hast wie oben beschrieben und die sprites geladen hast mit

    GML-Quellcode

    1. bla = ds_list_create();
    2. script(bla,"ordner");

    kannst du auf die sprites zugreifen über

    GML-Quellcode

    1. ds_list_find_value(bla,nummer)

    Um z.B. das erste geladene sprite zu zeichnen schreibst du

    GML-Quellcode

    1. draw_sprite(ds_list_find_value(bla,0),-1,100,100);
  • Benutzer online 1

    1 Besucher