Skocz do zawartości

Rysowanie surface na ekranie


Sutikku

Rekomendowane odpowiedzi

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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)
Odnośnik do komentarza
Udostępnij na innych stronach

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?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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.

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