• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wytłumaczenie działania kodu js

Object Storage Arubacloud
0 głosów
212 wizyt
pytanie zadane 18 czerwca 2015 w JavaScript przez LogicznyMat Użytkownik (940 p.)

Cześć,

Czy ktoś mógłby mi wytłumaczyć kod z js? Programuję w C++ i znam podstawy Javy.


    function moveJewels(movedJewels, callback) {
        var n = movedJewels.length,
            oldCursor = cursor;
        cursor = null;
        movedJewels.forEach(function(e) {
            var x = e.fromX, y = e.fromY,
                dx = e.toX - e.fromX,
                dy = e.toY - e.fromY,
                dist = Math.abs(dx) + Math.abs(dy);
            addAnimation(200 * dist, {
                before : function(pos) {
                    pos = Math.sin(pos * Math.PI / 2);
                    clearJewel(x + dx * pos, y + dy * pos);
                },
                render : function(pos) {
                    pos = Math.sin(pos * Math.PI / 2);
                    drawJewel(
                        e.type,
                        x + dx * pos, y + dy * pos
                    );
                },
                done : function() {
                    if (--n == 0) {
                        cursor = oldCursor;
                        callback();
                    }
                }
            });
        });
    }

1 odpowiedź

+3 głosów
odpowiedź 18 czerwca 2015 przez Comandeer Guru (601,110 p.)
wybrane 18 czerwca 2015 przez LogicznyMat
 
Najlepsza

To jest chyba z książki o tworzeniu gier w HTML5 (taki rycerz-robot na okładce)?

1. rzut oka: funkcja jest asynchroniczna, na co wskazuje oczekiwanie przez nią callbacku. Zatem trzeba oczekiwać, że coś w jej wnętrzu wywołuje najprawdopodobniej requestAnimationFrame (żeby zakolejkować animację)

Co do samego kodu natomiast wrzucam wersję z komentarzami:

function moveJewels(movedJewels, callback) { //funkcja dostaje tablicę przesuniętych diamentów oraz funkcję callback
	var n = movedJewels.length, //pobieramy liczbę przesuniętych diamentów
		oldCursor = cursor; //pozycja kursora na planszy
	cursor = null; //zerujemy pozycję kursora
	movedJewels.forEach(function(e) { //dla każdego z przesuniętych diamentów wykonujemy poniższe działania
		var x = e.fromX, y = e.fromY, //no wiadomo - współrzędne
			dx = e.toX - e.fromX,
			dy = e.toY - e.fromY,
			dist = Math.abs(dx) + Math.abs(dy); //obliczamy dystans między punktami początkowymi i końcowymi
		addAnimation(200 * dist, { //kolejkujemy animację
			before : function(pos) { //to coś zostanie wykonane przed animacją
				pos = Math.sin(pos * Math.PI / 2);
				clearJewel(x + dx * pos, y + dy * pos); //kolejkowanie usuwania diamentu (prawdopodobnie też asynchroniczne)
			},
			render : function(pos) { //przerysowujemy planszę
				pos = Math.sin(pos * Math.PI / 2);
				drawJewel( //rysujemy diament w nowej pozycji
					e.type,
					x + dx * pos, y + dy * pos
				);
			},
			done : function() { //to zostanie odpalone po wykonaniu zakolejkowanych animacji
				if (--n == 0) { //to sprawdza czy na pewno obsłużyliśmy już wszystkie diamenty
					cursor = oldCursor; //przywracamy kursor na starą pozycję
					callback(); //wykonujemy callback
				}
			}
		});
	});
}

 

komentarz 18 czerwca 2015 przez LogicznyMat Użytkownik (940 p.)

Wielkie dzięki wink

komentarz 18 czerwca 2015 przez LogicznyMat Użytkownik (940 p.)

A mógłbyś wytłumaczyć jeszcze co to jest:

pos = Math.sin(pos * Math.PI / 2);

laugh

komentarz 18 czerwca 2015 przez Comandeer Guru (601,110 p.)

Czysta matematyka ;) Math.sin to obliczanie sinusa. No a Math.PI to chyba oczywiste

komentarz 18 czerwca 2015 przez LogicznyMat Użytkownik (940 p.)

ok dzięki raz jeszczesmiley

Podobne pytania

0 głosów
1 odpowiedź 333 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 3 marca 2018 w PHP przez fipooo Bywalec (2,880 p.)
0 głosów
2 odpowiedzi 310 wizyt
pytanie zadane 10 czerwca 2015 w Inne języki przez LPTU Użytkownik (540 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...