Tile in Surface zeichnen

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

  • Tile in Surface zeichnen

    Hallo ich wollte fragen ob es eine Möglichkeit gibt die Tiles die ich bereits im Room verteilt habe in eine Surface zu zeichnen. Grund dafür ich will von dem Raum eine Minimap erstellen aber da die Tiles vor der Surface generiert werden habe ich keine Ahnung wie ich die da rein zeichne und alle Einzelteile per code mit den jeweiligen Positionen zu zeichnen wäre sehr aufwendig bei einem großen Raum.
  • Ist machbar, limitiert von der raumgrösse aber.
    würd sagen 2048x2048 ist grad so das maximum mit der ich gehen würde.
    Das ist jetzt für gms 1.4 auf jeden fall, gms 2 gibt es wahrscheinlich einfachere lösungen.

    create:

    GML-Quellcode

    1. tile_surface = surface_create(1024, 1024);
    2. tiles_loaded = false;


    bei einer tile-grösse von 16x16 gibt das 64x64 tiles im surface

    step:

    GML-Quellcode

    1. if (!tiles_loaded)
    2. {
    3. surface_set_target(tile_surface);
    4. var tiles = tile_ids_get_at_depth( DEPTH );
    5. for (var i = 0; i < array_length_1d(tiles); i++)
    6. {
    7. var t = tiles[i];
    8. var bg = tile_get_background(t);
    9. var wdt = tile_get_width(t);
    10. var hgt = tile_get_height(t);
    11. var lft = tile_get_left(t);
    12. var top = tile_get_top(t);
    13. var xx = tile_get_x(t);
    14. var yy = tile_get_y(t);
    15. draw_background_part(bg, lft, top, wdt, hgt, xx, yy);
    16. }
    17. surface_reset_target();
    18. tiles_loaded = true;
    19. }
    Alles anzeigen


    draw

    GML-Quellcode

    1. if (tiles_loaded)
    2. {
    3. draw_surface(tile_surface, 0, 0);
    4. }
  • glim888 schrieb:

    Wie ich dich kenne entwickelst du ja für Android.

    Dort solltest du beachten, dass surface_exists() nicht funktioniert. (laut meinen Beobachtungen)


    Also bei mir funktioniert es prima ansonsten würde man surface gar nicht nutzen können da beim minimieren der app dann das Spiel abstürzt.
    ich nutze es so im step event

    GML-Quellcode

    1. if !surface_exists(surfacevariable ){surfacevariable = surface_create(room_width,room_height)}
  • Ich hab noch eine alternative gefunden für mein Problem falls jemand mal ein ähnliches Problem hat, man kann den View im raum auf die Raumgröße stellen und dann per

    GML-Quellcode

    1. surface_save(application_surface, "room.png");
    ein Screen erstellen dann muss man nur noch die png nutzen und kann je nach bedarf eine kleine map vom großen Raum erstellen ohne nochmal alle Tiles in eine weitere Surface zeichnen zu müssen.
  • steven919 schrieb:

    Ich hab noch eine alternative gefunden für mein Problem falls jemand mal ein ähnliches Problem hat, man kann den View im raum auf die Raumgröße stellen und dann per

    GML-Quellcode

    1. surface_save(application_surface, "room.png");
    ein Screen erstellen dann muss man nur noch die png nutzen und kann je nach bedarf eine kleine map vom großen Raum erstellen ohne nochmal alle Tiles in eine weitere Surface zeichnen zu müssen.

    Da musst du aber aufpassen, alles andere auf der application surface (objekte usw.) werden auch mitkopiert. Am besten vor dem screenshot alle objekte kurz deaktivieren.
  • Simon Gust schrieb:

    steven919 schrieb:

    Ich hab noch eine alternative gefunden für mein Problem falls jemand mal ein ähnliches Problem hat, man kann den View im raum auf die Raumgröße stellen und dann per

    GML-Quellcode

    1. surface_save(application_surface, "room.png");
    ein Screen erstellen dann muss man nur noch die png nutzen und kann je nach bedarf eine kleine map vom großen Raum erstellen ohne nochmal alle Tiles in eine weitere Surface zeichnen zu müssen.

    Da musst du aber aufpassen, alles andere auf der application surface (objekte usw.) werden auch mitkopiert. Am besten vor dem screenshot alle objekte kurz deaktivieren.


    Ja Stimmt ist schon blöd ich werde wahrscheinlich mehrere bilder machen diese dann verkleinern und selbst aneinander zeichnen für eine world map, weil auch save(application_surface) bei mir noch knapp 8000x8000 schafft dann stürzt gm ab :D