ProExCurator Opublikowano 11 Lutego 2017 Udostępnij Opublikowano 11 Lutego 2017 Więc znalazłem na necie bardzo fajny, płynne działający "silnik" dla "latarki". https://drive.google.com/file/d/0B5tuOPULqE...&authuser=1 http://www.masterxy.bplaced.net/download.php (wersja nowsza, ma mniej skryptów) I wszystko byłoby super gdyby nie fakt że skrypt nie działa gdy go przeniosłem do mojej gry. GML ################################################################################ ############ FATAL ERROR in action number 1 of Step Event0 for object obj_control: Variable obj_control.sur(100002, -2147483648) not set before reading it. at gml_Object_obj_control_StepNormalEvent_1 (line 2) - surface_set_target(sur); ################################################################################ ############ Ludzie w komentarzach przy tym filmiku - również piszą, że dostają ten błąd w różnych sytuacjach. Poczytałem to co znalazłem dzięki Google i jedyna sensowna odpowiedz na podobny przypadek z podobnym skryptem była taka, że surface może w każdej chwili zostać usunięty z pamięci i trzeba sprawdzić czy się tak nie stało, jeżeli tak to znowu stworzyć surface. Nie wiem czy to ma sens - tłumaczone z ang. Dla mnie cały ten skrypt to póki co "trochę" zbyt zaawansowana sprawa, gdyby jednak działał to bardzo chętnie bym go wykorzystał w swojej grze. Może znajdzie się tutaj jakiś magik, który by pomógł znaleźć przyczynę występowania błędu i sposobu jego rozwiązania? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 11 Lutego 2017 Administratorzy Udostępnij Opublikowano 11 Lutego 2017 Surface lub zmienna nie istnieje. Zawsze trzeba sprawdzać czy surface istnieje zanim go użyjesz i w razie potrzeby utworzyć ponownie. Karta graficzna może surface wywalać w razie potrzeb kiedy chce, to taka nieco "tymczasowa" grafika zwalniana gdy coś innego potrzebuje tej pamięci w danym momencie (i zawsze zwalniana gdy przechodzisz do fullscreena/wylogowujesz sie/włącza się screensaver/komputer gasi monitor). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 11 Lutego 2017 Autor Udostępnij Opublikowano 11 Lutego 2017 Surface lub zmienna nie istnieje. Zawsze trzeba sprawdzać czy surface istnieje zanim go użyjesz i w razie potrzeby utworzyć ponownie. Karta graficzna może surface wywalać w razie potrzeb kiedy chce, to taka nieco "tymczasowa" grafika zwalniana gdy coś innego potrzebuje tej pamięci w danym momencie (i zawsze zwalniana gdy przechodzisz do fullscreena/wylogowujesz sie/włącza się screensaver/komputer gasi monitor). I próbowałem właśnie "tworzyć ponownie" surface. Próbowałem to osiągnąć w ten sposób, ale nie działa... GML sur = surface_create(room_width, room_height); if !surface_exists(sur) { sur = surface_create(room_width, room_height); } Więc właśnie miałem nadzieje że ktoś podpowie jak zrobić to prawidłowo? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 11 Lutego 2017 Udostępnij Opublikowano 11 Lutego 2017 Tylko że sprawdzanie czy surface istnieje powinno być przed jego rysowaniem/rysowanie na nim Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 11 Lutego 2017 Autor Udostępnij Opublikowano 11 Lutego 2017 Tylko że sprawdzanie czy surface istnieje powinno być przed jego rysowaniem/rysowanie na nim To nie bardzo rozumiem, jak w takim razie powinien wyglądać kod? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 12 Lutego 2017 Udostępnij Opublikowano 12 Lutego 2017 za każdym razem kiedy chcesz użyć surface, zanim go użyjesz: if !surface_exists(sur) sur = surface_create(szerokosc, wysokosc); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 12 Lutego 2017 Autor Udostępnij Opublikowano 12 Lutego 2017 Okay, działa, dzięki bardzo ;] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Lutego 2017 Administratorzy Udostępnij Opublikowano 13 Lutego 2017 Polecam zrobić taką funkcję/skrypt: surface_check_and_set(surfaceid, width, height) GML var s; if (!surface_exists(argument0) { s = surface_create(argument1, argument2); } else { s = argument0; } surface_set_target(s); I używanie tego zamiast surface_set_target(). Oczywiście mozna to ulepszyć i w globalnych zapisać wysokośc i szerokośc, żeby potem łatwo było zmienić, ale to już zostawiam własnym chęciom i wygodzie, bo jak surface uzywamy w jednym miejscu, to moze się nie opłacać pisać ekstra kodu bo szkoda czasu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę