W JavaScript nie ma funkcji sleep. Jest natomiast setTimeout, ale on nie działa na zasadzie usypiania (pauzowania) wykonywanego kodu, tylko opóźnia jego wykonanie o podany czas - właściwie to o co najmniej podany czas, bo jeśli podasz np. 1000 ms, to kod może wykonać się po 1500 ms, albo jeszcze później (zależy co w danym czasie dzieje się synchronicznie i jak szybko runtime obsłuży asynchroniczną akcję). Jeśli chcesz zasymulować pauzowanie kodu, to skorzystaj z kombinacji async/await wraz z Promisem owijającym setTimeout.
setInterval (podobnie do setTimeout) zwraca identyfikator, na podstawie którego możesz go zatrzymać. AFAIK zakres tych idków zaczyna się od 1, a więc do while przekazujesz wartość 1, która jako boolean jest traktowana jako true, dlatego pętla w obecnym kształcie działa w nieskończoność (nie licząc ifów, które nie działają).
dlaczego loop nie słucha się if'a, i się nie resetuje do zera po czwartej pętli? Czemu wgl ten if nie załącza się?
Ponieważ - w pierwszym kodzie - if sprawdzający zmienną loop jest za wywołaniem nieistniejącej funkcji sleep, co rzuca błędem.
- loop się resetuje,
W jakim sensie? Uruchamiając ten kod w konsoli zauważyłem błąd dotyczący braku zdefiniowanej zmiennej spriteMain oraz wartość zmiennej loop jest inkrementowana.
- czy to możliwe, że przez sleep(ms) reszta kodu się nie wykonuje?
Tak, ponieważ w JS nie ma takiej funkcji.