MrJuliusz Opublikowano 15 Sierpnia 2017 Udostępnij Opublikowano 15 Sierpnia 2017 Witajcie Mam mały problem z moją fizyką wody, wiem jak stworzyć prymitywną fizykę wody, polega na sprawdzaniu czy następne 32 pixele są wolne jeżeli tak to tworzy wodę,wszystko działa na alarm oto kod: if place_free(x,y+32) { instance_create(x,y+32,obj_water) } if place_free(x+32,y) { instance_create(x+32,y,obj_water) } if place_free(x-32,y) { instance_create(x-32,y,obj_water) } Jest jeden mały problem, czyli optymalizacja - Po kilku sekundach gra zaczyna się wieszać. Wiem że to może być spowodowane tym że każdy objekt sprawdza czy może zostać "Rozlany". Niestety nie jestem dobrym programistą i nie potrafię tego problemu rozwiązać więc kieruje pytanie do ludzi którzy mają większą wprawę w GML Dziękuje za każdą pomoc MrJuliusz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 15 Sierpnia 2017 Udostępnij Opublikowano 15 Sierpnia 2017 Masz zaznaczoną wodę jako solid? Śmiga jak trzeba: water.gmk MrJuliusz 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 15 Sierpnia 2017 Udostępnij Opublikowano 15 Sierpnia 2017 Jeżeli gra spowalnia to znak że trzeba włączyć profiler i sprawdzić gdzie. Oraz to że muszę dokończyć dla was tekst o tym jak profilera używać. https://docs.yoyogames.com/source/dadiospice/001_advanced use/profiling.html Nie możesz próbować szukać rozwiązań problemu jeżeli nie wiesz co go powoduje. - Jeżeli jest za dużo obiektów to możesz spróbować dezaktywować albo ukrywać te które nie są potrzebne. - Jeżeli za często jest sprawdzane czy możesz stworzyć wodę to możesz to ograniczyć - Może elementy tworzą się nie tam gdzie chcesz? Na przykład poza room? Jedno co na pewno możesz zrobić to podejście identyczne jak jest w Minecraftcie. Zrób stan który oznacza że woda się updatuje. Coś takiego create: update=true step: if(update) { if place_free(x,y+32) { instance_create(x,y+32,obj_water) } if place_free(x+32,y) { instance_create(x+32,y,obj_water) } if place_free(x-32,y) { instance_create(x-32,y,obj_water) } update = false } W ten sposób sprawdzenie wykona się tylko raz. Jeżeli chcesz z jakiegoś powodu ponownie wykonać sprawdzenie, bo np zabrałeś wodę, to wystarczy że w którymś obiekcie wody znów zmienisz update=true Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MrJuliusz Opublikowano 15 Sierpnia 2017 Autor Udostępnij Opublikowano 15 Sierpnia 2017 Dziękuje Adam Pomogło :) Dziekuje za wszystkie odpowiedzi, pozdrawiam MrJuliusz! PS: Można zamykać wątek 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ę