Mateusz Nejman Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 Witajcie! Tak jak w temacie: jak optymalnie narysować siatkę? Chodzi mi o to, żeby podczas rysowania siatki aplikacja nie lagowała. Takim kodem rysuję z lagami: DRAW GML for(i=0;i<=room_width;i+=32) { for(j=0;j<=room_height;j+=32) { draw_rectangle(i,j,i+32,j+32,true) } } Jak narysować taką siatkę bez lagów Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 Rysować tylko to co widać na view. I czemu rysujesz prostokąty zamiast linii? Jedna z pętli będzie wyglądać tak: GML for(i=view_xview[0]-(view_xview[0] mod 32);i<=view_xview[0]+view_wview[0];i+=32) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 Rysować raz na surface!!! Surface powinien być większy od viewa i musiał byś przesuwać tą siatkę razem z ruchem viewa ale skokowo co jedną kratkę tak by siatka zawsze była w kadrze ale sprawiała wrażenie że stoi w miejscu a nie jest podczepiona do tego viewa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 musiał byś przesuwać tą siatkę razem z ruchem viewa ale skokowo co jedną kratkę tak by siatka zawsze była w kadrze ale sprawiała wrażenie że stoi w miejscu a nie jest podczepiona do tego viewa. Czyli tak jak ja zrobiłem używając mod w pętli. A pomysł z surface może w tym wypadku okazać się wolniejszy, bo cały surface będzie w pamięci. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mateusz Nejman Opublikowano 1 Maja 2014 Autor Udostępnij Opublikowano 1 Maja 2014 Dzięki! Moja pętla wygląda teraz tak: GML for(i=view_xview[3]-(view_xview[3] mod 32);i<=view_xview[3]+view_wview[3];i+=32) { for(j=view_yview[3]-(view_yview[3] mod 32);j<=view_yview[3]+view_hview[3];j+=32) { draw_line(i,j,i,j+view_hview[3]) draw_line(i,j,i+view_wview[3],j) } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 Nie sądzę by użycie surface było wolniejsze od wykonania takiej pętli. Pamiętaj Threef że GMa pięta Achillesowa to wolne w uj pętle. Zobacz ile tutaj jest obliczeń mod jest używany tutaj bardzo często a na surface był by użyty tylko 2 razy jak się nie mylę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 mod jest użyty tyle razy ile wykona się pierwsza pętla +1. Nie pamiętam w której pamięci przechowywane są surface (video tak?) więc wszystko zależy od rozmiarów view i dostępnej pamięci. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 Jeszcze taki drobny tip. for(i=view_xv... for(var i=view_xv... dopisanie tego var przyspiesza pętlę Na surface: GML (create) /// rysowanie siatki na surfacce gestosc = 32; surface_siatka = surface_create( view_wview + 2*gestosc, view_hview + 2*gestosc ); surface_set_target( surface_siatka ) draw_clear_alpha(0, 0); draw_set_colour(0); for(var i = 0; i <= view_wview+gestosc*2; i+= gestosc) { for(var j = 0; j <= view_hview+gestosc*2; j+= gestosc) { draw_line(i,j,i,j+view_hview) draw_line(i,j,i+view_wview,j) } } surface_reset_target(); GML (draw) /// rysowanie surface na ekranie draw_surface( surface_siatka, view_xview div gestosc * gestosc - gestosc, view_yview div gestosc * gestosc - gestosc ); Zaleta jest oczywista, cała matematyka wykonuje się raz ( w create ) oraz nie ważne jaka będzie gęstość czy 4, 16, 32, 128 nigdy to nie wpłynie na różnicę w fpsach. Po za tym na surface możesz sobie ładne pola rysować zamiast tych lini za pomocą draw_sprite i to nadal nie wpłynie na zmianę fpsów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 Skopałeś chyba w create bo na surface rysujemy od 0,0. A poza tym wszystko powinno być ok. ;) Chociaż wciąż uważam że przechowywanie takiego (pustego) surface w pamięci to słaby pomysł. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 No tak bo to w create przekopiowałem od Mateusza my bad :P Teraz powinno być dobrze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 @HuderLord fajne tylko poprav draw_set_colour(0); dla copy/paste ludzi :thumbsup: jak by mialo byc dla slabszych kompow/notebookow/etc to chyba bedzie problem s videoram jezeli by nieskodzila troche grubsza siatka, to mozna pograc sobie z przykladem HuderLorda i zmiejszyc surface od 1/2 do 1/8, miejszy chyba bylo by juz przesada. wystarczy uzyc draw_surface_stretched Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 W GMS jest colour nie color :P Co do strethed to faktycznie jest dobry pomysł jak by się chciało mieć mniejszą jakość tej siatki. 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ę