Bilder als Mosaik zeichnen

  • GM 8
  • Bilder als Mosaik zeichnen

    Ich habe ein Bild, was nach und nach erkenntlicher werden soll.
    Dazu soll es als "Mosaik" dargestellt werden mit immer mehr "Pixeln"
    (Also am Anfang nur ein Block, dann 4, dann 9 etc...)
    Ich hoffe soweit habt ihr mich verstanden. :)

    Das habe ich soweit auch hinbekommen.
    Habe es so gemacht:

    GML-Quellcode

    1. for(i = 0; i < anz_boxes; i += 1)
    2. {
    3. for(j = 0; j < anz_boxes; j += 1)
    4. {
    5. color[i,j] = surface_getpixel(sf,1000+440/anz_boxes*(i),1000+330/anz_boxes*(j)); //Farbe für die Pixelbox holen
    6. draw_set_color(color[i,j]); //Farbe setzen
    7. draw_rectangle(50+440/anz_boxes*i,50+330/anz_boxes*j,50+440/anz_boxes*(i+1),50+330/anz_boxes*(j+1),false); //Box in der Farbe und entsprechender Größe zeichnen
    8. }
    9. }

    anz_boxes gibt die Anzahl der Pixelboxen in der Breite an und wird alle paar Steps um 1 erhöht.

    Das Problem hierbei ist jetzt nun, dass die Performance da mega drunter leidet.
    Also die fps hat sich sehr schnell schon halbiert.

    Jetzt wollte ich fragen, ob es da elegantere Lösungen gibt. :)
  • Hmm, müsste es geben. Wie wärs wenn du nur am Anfang des Spiels die Zeile in einem loop ausführen lässt die alle Farben in das zweidimensionales Array einliest?
    Dann kannst du im Draw-event nur mit diesem Array arbeiten, anstelle die langsame surface_getpixel Funktion zu verwenden.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Also da du ja als minumum viererblöcke haben wirst, musst du eigentlich nur jeden zweiten Pixel einspeichern denn wenn "einzel-boxen" gedrawt werden müssen, kannst du gleich das original-Sprite drawen.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Benutzer online 1

    1 Besucher