ds_grid leer

  • GM 8
  • ds_grid leer

    ich versuche mein dynamisches Map-System auf eine ds_grid umzustellen. Da ich bisher noch nicht damit gearbeitet habe, kann es gut sein, dass ich das Prinzip missverstanden hab. Ich versuche in diesem Grid mehrere Maps(Chunks trifft es vielleicht besser) im Speicher zu halten, die ich nur bei Bedarf (View fliegt drüber) rendere.

    Vorgestellt hab ich mir das ganze so:


    Die Daten der Map werden aus einer Textdatei zeilenweise gelesen und sollen in die erstellte ds_grid geladen werden:

    GML-Quellcode

    1. map = ds_grid_create(128, 4);
    2. var i; i=0;
    3. while(reafile()){
    4. obj = fields[0];
    5. show_message(obj); //Ausgabe: oGrass
    6. xx = real(fields[1]);
    7. yy = real(fields[2]);
    8. zz = real(fields[3]);
    9. //execute_string("instance_create("+string(xx)+", "+string(yy)+", "+obj+")");
    10. ds_grid_add(map, 0, i, obj);
    11. show_message(ds_grid_get(map, 0, i)); //Ausgabe: 0
    12. ds_grid_add(map, 1, i, xx);
    13. ds_grid_add(map, 2, i, yy);
    14. ds_grid_add(map, 2, i, zz);
    15. file_text_readln(file);
    16. i+=1;
    17. }
    Alles anzeigen


    scheinbar ist in jeder der Variablen jedoch 0 drinnen, der Fehler passiert defintiv beim einfügen/auslesen in die ds_grid.

    EDIT: ungekürzter Code
    Spoiler anzeigen

    GML-Quellcode

    1. var file_name; file_name = argument0;
    2. /*var xversatz; xversatz = argument1;
    3. var yversatz; yversatz = argument2;*/
    4. var file; file = file_text_open_read(file_name);
    5. var mapSizeX, mapSizeY, mapName;
    6. map = ds_grid_create(176, 4);
    7. var i; i = 0;
    8. while(!file_text_eof(file)){
    9. line = file_text_read_string(file);
    10. split_string(line, " ", "fields");
    11. switch(fields[0]){
    12. case "meta":
    13. if(fields[1] == "map"){
    14. switch(fields[2]){
    15. case "size":
    16. mapSizeX = fields[3];
    17. mapSizeY = fields[4];
    18. break;
    19. case "name":
    20. mapName = fields[3];
    21. break;
    22. case "left":
    23. case "right":
    24. case "up":
    25. case "down": //
    26. // show_message("down: "+fields[3])
    27. // loadSideMap('assets/maps/'+string(fields[3]), real(fields[4]), real(fields[5]));
    28. break;
    29. }
    30. }break;
    31. default:
    32. obj = fields[0];
    33. show_message(string(obj));
    34. xx = real(fields[1]);
    35. show_message(xx);
    36. yy = real(fields[2]);
    37. show_message(yy);
    38. // zz = fields[3];
    39. //execute_string("instance_create("+string(xx)+", "+string(yy)+", "+obj+")");
    40. //ds_grid_add(global.map, 0, i, obj);
    41. ds_grid_set(map, 0, i, string(obj));
    42. show_message(ds_grid_get(map, 0, i));
    43. ds_grid_set(map, 1, i, xx);
    44. show_message(ds_grid_get(map, 1, i));
    45. ds_grid_set(map, 2, i, yy);
    46. show_message(ds_grid_get(map, 2, i));
    47. break;
    48. }
    49. i+=1;
    50. file_text_readln(file);
    51. }
    52. file_text_close(file);
    53. return map;
    Alles anzeigen

    i think, therefore 私 は.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von domis4 ()

  • ja, beim itererieren krieg ich aus jeder Koordinate eine 0, parallel dazu jeweils aus der Variablenausgabe den richtigen Wert. Auch ein umwandeln in Strings/Reals hat nichts gebracht. ds_grid_set() macht keinen Unterschied

    EDIT: nach intensivem eingrenzen hab ich das Problem ausgemacht: der Scope des übergabearrays war nur innerhalb des scripts erreichbar (var fields). Das Array an sich konnte ich komischerweise erreichen, werte übergeben war an die grid nicht möglich. Jetzt ist var rausgeflogen und ich kanns erreichen.
    i think, therefore 私 は.

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