Verwisch-Effekt

  • Verwisch-Effekt

    Hallo zusammen! Ich würde für ein 2D-Spiel gern einen Verwisch-Effekt auf den Spielbildschirm legen, wenn man ins Pausemenü geht. Das Menü soll dann "normal" dargestellt werden - als oberste Ebene. Dahinter müsste dann ein Objekt kommen, was sich von der DEPTH her "über" dem Spielfeld befindet und so den Eindruck vermittelt, man würde durch Milchglas schauen. Ich glaube schon, dass sowas möglich, aber wahrscheinlich ein hoher Codingaufwand ist. Hat viell jemand eine Lösung?

    MfG, mauge
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Klar gibts da eine lösung :3. Mein Lösungsansatz für so etwas währe den aktuellen Bildschirm mittels screen_redraw() auf ein Surface zu malen. Dieses Surface mußt du dann auf ein anderes Surface kreisförmig aufmalen, und zwar mit einem niedrigen Alpha. Damit hättest du deinen geblürten Hintergrund. Das erste surface kannst du jetzt löschen, es wird nicht mehr benötigt. Und das zweite Surface mußt du einfach in einem Objekt anzeigen, desen Depth unter der des Menüs ist, aber über dem eigentlichen Spiel. Ich persönlich würde jedoch den Raum einfach verlassen. Das Surface hast du ja nach wie vor und du ersparst dir den ganzen Streß, das ganze Spiel, bis auf das Menü einzufrieren.
    ...
  • Mit Surfaces habe ich mich ehrlich gesagt noch nicht beschäftigt. Das Einfrieren des Games ist bereits geschehen, ich bräuchte halt wirklich nur noch diesen Effekt. Kannst du mir die Surfaces und deren Anwendungen viell etwas näher bringen? Ich habe schon einige brauchbare Effekte (echt eine schöne Angelegenheit!) davon gesehen, doch leider waren sie alle keine editierbaren gm6-Files. Danke!
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Da gibts net viel zu erklären: Mit

    GML-Quellcode

    1. TmpSurface = create_surface(320,240);


    erzeugst du das ganze.

    GML-Quellcode

    1. surface_set_target(TmpSurface)
    2. screen_redraw();
    3. surface_reset_target();


    zeichnet den aktuellen Bildschirm in das surface.

    GML-Quellcode

    1. global.BlurSurface = create_surface(320,240);
    2. surface_set_target(global.BlurSurface)
    3. for(i = 0; i < 20; i+= 1)
    4. {
    5. draw_surface_ext(TmpSurface,-10+i,0,1,1,0,c_white,1/20);
    6. }
    7. surface_reset_target();


    sollte auf global.BlurSurface einen schönen verwisch effekt machen.

    GML-Quellcode

    1. surface_free(TmpSurface);


    löscht jetzt das alte Surface.

    Jetzt brauchst du nur mehr ein objekt das in seiner Draw Funktion folgenden Code aufruft:

    GML-Quellcode

    1. draw_surface(global.BlurSurface,x,y);
    ...
  • @Shoba: Ich danke dir für deine Hilfe! Ich werd mich damit wohl mal ausgiebig auseinandersetzen.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Benutzer online 1

    1 Besucher