Tile ID mit "with" lesen?

  • GM 8

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

  • Tile ID mit "with" lesen?

    Ich habe einen Raum den ich mit tiles gemalt habe.

    Jetzt möchte ich im room creation code auslesen welche tiles an welcher Stelle in grid liegen, und diese Werte abspeichern.
    Dazu dachte ich mir, ich gehe mit "with" durch alle meine tiles einer Sorte und wandle dann x und y in mein grid um.

    Dummerweise sagt mir GM immer,
    "Tile does not exist."

    GML-Quellcode

    1. with (background_water)
    2. {
    3. i_cell_x = i_get_cell_from_x_coord(tile_get_x(background_water.id));
    4. i_cell_y = i_get_cell_from_y_coord(tile_get_y(background_water.id));
    5. ai_tiles[i_cell_x,i_cell_y] = I_CELL_WATER;
    6. }

    Background_water ist der Name des tiles.
    i_getblabla sind die Umwandlungsfunktionen von screen-xy nach grid xy

    Wer kann mir weiterhelfen?
  • Den "with"-Ausdruck kannst du nicht, soweit ich weiß, auf Backgrounds bzw. Tiles anwenden.
    Das Statement kannst du nur im Zusammenhang mit Objekten benutzen. Deswegen bekommst du auch den Fehler.
    Entweder du speicherst alle Tiles in einer Liste oder einem Array und iterierst da durch, oder erstellst für jedes Tile ein Objekt (background_water_tile oder so), was die id des jeweiligen Tiles enthält.
    Bei der zweiten Variante könntest du dann "with" benutzen.

    MfG

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Ich wollte eben kein Objekt nehmen wegen der Geschwindigkeit.
    Auch wenn es für mich wahrscheinlich kaum einen Unterschied machen würde, da der Code nur bei jedem Tag Nacht Wechsel ausgeführt wird.
    Aber aus Prinzip ;)
    Das mit dem alles in einer Liste speichern hab noch nicht überlegt.
    Ich habe das jetzt so gemacht, ich habe jeder Tileart einen anderen Layer gegeben.
    Dann habe ich die Layer als Konstanten gespeichert (z.b. BACKGROUND_GRASS).
    Dann loope ich über mein Array, lasse mir die Koordinate auf dem Bildschirm ausrechnen und prüfe dann ob an der Stelle x,y ein Tile eines bestimmten Layers existiert.
    Ist ganz schön von hinten durch die Brust ins Knie aber was clevereres is mir grad nicht eingefallen.

    GML-Quellcode

    1. for (i=0; i<I_MAP_CELLS_WIDTH; i+=1)
    2. {
    3. for (j=0; j<I_MAP_CELLS_HEIGHT; j+=1)
    4. {
    5. i_x = i_get_x_coord_from_cell(i);
    6. i_y = i_get_y_coord_from_cell(j);
    7. tile_id = tile_layer_find(BACKGROUND_GRASS,i_x,i_y)
    8. if (tile_id > -1)
    9. {
    10. //do something
    11. }
    12. else
    13. {
    14. tile_id = tile_layer_find(BACKGROUND_EARTH,i_x,i_y)
    15. if (tile_id > -1)
    16. {
    17. // do something
    18. }
    19. else
    20. {
    21. tile_id = tile_layer_find(BACKGROUND_STONE,i_x,i_y)
    22. if (tile_id > -1)
    23. {
    24. // do something
    25. }
    26. else
    27. {
    28. tile_id = tile_layer_find(BACKGROUND_WATER,i_x,i_y)
    29. if (tile_id > -1)
    30. {
    31. // do something
    32. }
    33. }
    34. }
    35. }
    36. }
    37. }
    Alles anzeigen