Skocz do zawartości

screen_save alternatywa


MaxGaming

Rekomendowane odpowiedzi

Czy da się do surface wczytać jakoś to co się aktualnie znajduje w oknie gry?

Jest application_surface, ale on dziwnie działa, albo coś źle robię. Bo np. jak wziąłem w celu zdebugowania co jest nie tak. żeby mi rysował w połowie ekranu surface aplikacji to animuje mi to co ma image_speed=0 i w oknie nie animuje mi itp..

Chodzi mi o coś ala screen_save, ale żeby zamiast do pliku zapisać do surface

Odnośnik do komentarza
Udostępnij na innych stronach

możesz skorzystać z application_surface do rysowania na innych surface'ach

GML
surface_set_target(twoj_surface)

draw_surface(application_surface,jakies_x_najlepiej_0,jakies_y_najlepiej_0)

surface_reset_target()

teraz powinieneś mieć na swoim surface'u narysowane to, co masz na ekranie (a właściwie to, co było narysowane klatkę przedtem) - rzecz w tym, że powinieneś to wywołać w Post Draw Event, wcześniej możesz mieć nie wszystko narysowane

Odnośnik do komentarza
Udostępnij na innych stronach

Użyłem tego w post i wciąż cuda niewidy mi wychodzą :/

Ogółem cel jest taki:

robię własny "system" message'y i chce, aby wszystko było nieaktywne podczas wyświetlania wiadomości.

Założenia są takie:

tworzę surface z tym co aktuualnie widać, deaktywuje wszystkie instancje prócz message'a, następnie wyświetlam surface, nakładam lekkie "przyciemnienie"(rectangle z odpowiednią alpha) i na końcu rysuje message.

Wynik:

otrzymany surface jest nieco inny od tego który widziałem wcześniej. Mam wrażenie, że 1. nie widać niczego co umieszczam w draw obiektów, 2. nie wiedzieć czemu wszystko co na "ekranie" się nie animuje, w otrzymany surface się animuje.

 

Próba z post-draw nic nie zmieniła, wciąż coś robię nie tak :/

 

@e: wstępnie wykryłem problem. Wszystko ustępuje gdy zamiast draw_gui wszystko umieszczam w draw. Teraz próbuję dalej zdebugować co jest konkretnie problemem. Podejrzewam że application_surface nie obejmuje tego co jest w draw_gui, ale to muszę jeszcze zweryfikować...

Odnośnik do komentarza
Udostępnij na innych stronach

surface_set_target na stałe zmienia target draw'u więc możesz go zmienić na 1 step(lub klatkę jeśli tak zaprogramujesz) aby zapisać wszystko co powinno być na ekranie. Niemniej wtedy na 1 step(lub klatkę jeżeli tak zaprogramujesz) będzie czarny ekran.

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem w post draw tak:

GML
backScreen=surface_create(view_wport[0], view_hport[0]);

surface_copy(backScreen, 0, 0, application_surface);

i potem go rysuje... Tylko że działa wszystko w porządku o ile nie ma na ekranie obiektów co mają draw_gui. Pomijane jest wszystko z draw gui... Co należy zmienić, żeby obejmowało draw gui?
Odnośnik do komentarza
Udostępnij na innych stronach

d688ab1776ec.png

Ale nie widzę takiego eventu jak post draw gui. W draw gui end nie działa poprawnie, w post draw także :/

 

@e: W dokumentacji znalazłem teraz, że rzeczywiście post draw nie obejmuje gui. Czyli jak to obejść? Wychodzi na to, że albo muszę kombinować z tą klatką co mówił vader, albo zapisywać do pliku i wczytywać(domyślam się że to skrajnie głupi pomysł)?

 

Źródło: http://docs.yoyogames.com/source/dadiospic...aw%20event.html

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Może powinieneś użyć buforów? Surface ma to do siebie, że po evencie draw karta graficzna może zwolnić pamięć potrzebną do jego obsługi, jeśli akurat jakiś inny program na komputerze potrzebuje tej pamięci.

 

Zainteresuj się

 

buffer_get_surface()

buffer_set_surface()

 

Wtedy powinno się dać "zachować" surface z danego momentu.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...