Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Witam. Posiadam bardzo ubogi ale spełniający zadanie system "światła". Najpierw pokaże kod, a potem przedstawię problem.

GML (Create)
nowy=surface_create(room_width,room_height)// tworzenie surface

alpha=0

alarm[0]=30

GML (Alarm0)
//Tutaj tylko sprawdzam aktualna godzine, nic nie rysuje</span>

GML (Step)
surface_set_target(nowy)

draw_set_alpha(alpha)

draw_set_color(c_black)

draw_rectangle(0,0,room_width,room_height,0) //tutaj jest chyba problem

if obj_player_self.latarka==true

{

with(obj_player_self){draw_set_blend_mode(bm_src_color) draw_circle(self.x,self.y,60,0) }}

 

draw_set_blend_mode(bm_normal)

surface_reset_target()

GML (draw)
draw_surface(nowy,view_xview,view_yview) // tutaj duzo zmienialem, nawet nie pamietam poczatkowych wartosci

draw_text(8,70 ,alpha)
Kod się różni od jego początkowej wersji, bo cały czas coś zmieniałem, aż się pogubiłem ;p

Problem polega na tym, że jest duży room, więc zamiast 60fps widzę 10-20. Wiem, że muszę rysować surface tylko na ekranie, a nie na cały room, ale właśnie nie wiem jak to zrobić. Kombinowałem z view_xview, ale wtedy latarka źle się rysowała i draw_rectangle, na początku rysował tylko połowę ekranu, trzeba było 'poruszać' viewem.

Opublikowano

GML (create)
nowy=surface_create(view_wview, view_hview)// tworzenie surface

alpha=0

alarm[0]=30

 

GML (step)
surface_set_target(nowy)

draw_clear_alpha(0, 0);

 

if obj_player_self.latarka==true

{

with(obj_player_self)

{

draw_set_blend_mode(bm_src_color)

draw_circle(x-view_xview, y-view_yview, 60, 0)

draw_set_blend_mode(bm_normal)

}

}

surface_reset_target()

 

GML (draw)
draw_surface(nowy,view_xview,view_yview) // tutaj duzo zmienialem, nawet nie pamietam poczatkowych wartosci

draw_text(8,70 ,alpha)
Opublikowano

Dzięki za odpowiedź, ale ten kod też ma widocznie małą wydajność bo teraz z 60fps spadło na 28-38 . I latarka też się źle rysuje.

Opublikowano

GML
nowy=surface_create(view_wview[0],view_hview[0])// tworzenie surface

alpha=0

alarm[0]=30

GML
surface_set_target(nowy)

draw_clear_(c_black);

 

if obj_player_self.latarka with(obj_player_self)

{

draw_set_blend_mode(bm_src_color)

draw_circle(x-view_xview[0], y-view_yview[0], 60, 0)

draw_set_blend_mode(bm_normal)

}

surface_reset_target()

W jakim obiekcie masz wykonywany ten kod? Czy robisz więcej niż jeden taki obiekt?

  • Administratorzy
Opublikowano

1. GM:Studio? Rysujemy wtedy na surface w draw.

2. może zamiast with

GML
draw_set_blend_mode(bm_src_color)

draw_circle(obj_player_self.x-view_xview, obj_player_self.y-view_yview, 60, 0)

draw_set_blend_mode(bm_normal)

 

chyba, ze tych obiektów jest dużo no to masz odpowiedź - nie rób rysowania dla tych którzy są poza view.

Opublikowano

Mam tylko jeden taki obiekt, chociaż w przyszłości chciałem aby takich okręgów było więcej, ale akurat dla innego obiektu, wtedy będę po prostu sprawdzał czy obiekt nie jest poza ekranem. Spróbowałem robić tak jak na dole i oto efekty. mcqfll.png

Teraz się wszystko rusza. Na potrzeby tej gry korzystam z Game Makera 8.0 Próbowałem różnych wariacji, dać w Draw, step, z With, bez, efekt taki sam.

Aaa zapomniałem dodać. Mam specjalny obiekt, który kontroluję to, nie w playerze.

Opublikowano

Tak naprawdę, pierwszy post, to wszystko. Nie jest to żaden niesamowity system cieni, z różnymi kolorami itd. To tylko czarny ekran, z różnym alpha, rysowanym na surface, a światło to tylko rysowanie okręgu.

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