Skocz do zawartości

Światło - obiekt nie widzi surface'a


MiChAl200

Rekomendowane odpowiedzi

Postanowiłem stworzyć światło w grze. Mam dwa obiekty: "oCiem" i "oSwieca".

W oCiem jest taki kod(Create):

GML
surf=surface_create(room_width,room_height);

 

surface_set_target(surf);

 

draw_set_color(c_black);

draw_set_alpha(0.7);

draw_rectangle(0,0,room_width,room_height,false);

draw_set_alpha(1);

 

surface_reset_target();

 

A w Draw:

GML
draw_surface(surf,0,0);

 

 

 

A w "oSwieca" ma się tworzyć okrąg odpowiedzialny za światło.

GML
surface_set_target(surf);

 

draw_set_alpha(0.5)

draw_circle_color(x+8,y+8,96,c_white,c_black,false);

draw_set_alpha(1);

 

surface_reset_target();

 

 

Problem jest taki, że wychodzi błąd, że nie widzi zmiennej "surf" w oSwieca.

Nawet zamieniłem: "surf" na "oCiem.surf" i też nie widzi.

 

Nie wiem czemu tego nie widzi. Zrobiłem nawet ta zmienną jako globalną i też nie działa

Odnośnik do komentarza
Udostępnij na innych stronach

Zrób tak:

GML (oCiem)
zmienna = "działa";

surf=surface_create(room_width,room_height);

 

surface_set_target(surf);

 

draw_set_color(c_black);

draw_set_alpha(0.7);

draw_rectangle(0,0,room_width,room_height,false);

draw_set_alpha(1);

 

surface_reset_target();

 

GML (oSwieca)
show_message(oCiem.zmienna);

surface_set_target(surf);

 

draw_set_alpha(0.5)

draw_circle_color(x+8,y+8,96,c_white,c_black,false);

draw_set_alpha(1);

 

surface_reset_target();

 

I sprawdź czy wiadomość się wyświetla bo jak tak to coś jest źle z tworzeniem surfaca. Może być zbyt wielki np.

Odnośnik do komentarza
Udostępnij na innych stronach

A nie masz czasem gdzieś innego zasobu o nazwie oCiem?

 

Ewentualnie sprawdź jeszcze czy to zadziała:

GML
surface_set_target((110121).surf);

 

draw_set_alpha(0.5)

draw_circle_color(x+8,y+8,96,c_white,c_black,false);

draw_set_alpha(1);

 

surface_reset_target();

 

edit: lol cytowałem zamiast edytować post :DD

Odnośnik do komentarza
Udostępnij na innych stronach

Oba kody, które miałem w obu obiektach przeniosłem z Create do Step i działa...

 

HuderLord - miałeś rację efekt światła trochę nie wyszedł, bo jak jedno światło przecina drugie zasłania drugie kolorem czarnym, i przez to nie jest jaśniej.

Dzięki za pomoc, ale jeszcze pytanie, czy wiecie jak zrobić, żeby to światło lepiej wyglądało? Bo próbowałem tego draw_set_blend_mode i efekty nie były dobre.

Odnośnik do komentarza
Udostępnij na innych stronach

Rozmiar surfejsa także można zoptymalizować. Twórz go o rozmiarze widoku a nie rooma. A obiekty castujące światło w chwili rysowania na surfejsie przesuń o pozycję widoku.

GML
surface_set_target(surf);

 

draw_set_alpha(0.5)

draw_circle_color(x+8-view_xview,y+8-view_yview,96,c_white,c_black,false);

draw_set_alpha(1);

 

surface_reset_target();

I w oCień

GML
draw_surface(surf,view_xview,view_yview);
Odnośnik do komentarza
Udostępnij na innych stronach

Próbuję jakoś zrobić tym draw_set_blend_mode( bm_subtract ) i wtedy jest światło, ale chciałbym zrobić tak bardziej realistycznie, że im bliżej środka tym więcej światła, a im dalej to coraz mniej, a nie że całe kółko tym samym światłem.

 

 

 

EDIT: Dobra! Poradziłem sobie! Już jest ok wszystko. Dzięki wszystkim za pomoc :)

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ę...