Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   31 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
  • 0
MrJuliusz

Fizyka wody 2D

Pytanie

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

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 1

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Dziękuje Adam

 

Pomogło :)

 

Dziekuje za wszystkie odpowiedzi, pozdrawiam

 

MrJuliusz!

 

 

PS: Można zamykać wątek

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×