Skocz do zawartości
Stydziu

wyjaśnienie kodu

Rekomendowane odpowiedzi

Cześć

 

Mam pytanie odnośnie kodu z tourialu, ogólnie kod rozumiem ale nie wiem po co jest ta pętla while co robi wiem że wykonuje się jak nie ma kolizji ale nie widzę żadnej różnicy jak usunę ten fragment kodu z tym jak on jest w poruszaniu się gracza.

 

if (place_meeting(x+hsp,y,oWall))
{
    
    while(!place_meeting(x+sign(hsp),y,oWall))
    {
        x = x + sign(hsp);
    }
    hsp = 0;
}

x = x + hsp;

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Chodzi tutaj o dodatkowe sprawdzanie każdego piksela, tak zwane "pixel perfect collision". Samo IF sprawdza, czy w odległości od równej prędkości poruszania jest ściana (oWall). Jeśli tak, oczywiście IF wykonuje się. Ale co jeśli prędkość jest większa niż powiedzmy 10px? Wtedy zostanie nam luka, bo IF sprawdził to tylko raz. Kod w WHILE wykonuje się BEZ PRZERWY dopóki warunek jest spełniony. Dlatego łatwo grę można zatrzymać w miejscu, ponieważ WHILE zapętla się i nie pozwala programowi wykonywać się dalej, kiedy źle określimy warunek. 

Czyli, wykonując swój kod, IF sprawdza, czy napotkano ścianę, jeśli tak, WHILE sprawdza pozycję gracza + jeden pixel! (sign oznacza jeden pixel) i jeśli nie wykryję ściany, przesuwa gracza o ten jeden pixel i tak w nieskończoność, dopóki pozycja gracza + jeden pixel == pozycja ściany.

W praktyce wygląda to następująco, gdy prędkość poruszania się gracza to 20px
Animated GIF

  • Super (+1) 2

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dzięki za wyczerpującą odpowiedz.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Z początku chciałem napisać, ze w tej sytuacji ostatnia linijka jest też zbędna, bo przecież hsp = 0, ale to nie prawda - jeśli akurat pozycja gracza jest idealna, ze nie wystąpi ten problem, wtedy właśnie hsp ma wartość która zbliży nas na 0 pikseli do ściany, więc jednak to musi być (chociaż mogło by tam być else). Sprytne.

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

×