Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odbijające się od siebie piłeczki js canvas
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
gangren90
Witam,
mam taki problem kompletnie nie działają mi kolizje między piłeczkami odbijają się one tylko od ściany ktoś mógłby pomóc?

www.pastebin.com/Hfv5j5b8
Crozin
1. Kod wrzucać w formie "online", np. na jsfiddle.net.
2. W pętli for, która ma sprawdzić czy doszło do kolizji pomiędzy poszczególnymi kołami, korzystasz z globalnej zmiennej i, w momencie gdy powinieneś korzystać ze zmiennej lokalnej (brakuje var przed jej inicializacją).

Dodatkowo:
1. Żeby podnieść wydajność tego kodu, przy sprawdzaniu kolizji powinieneś najpierw sprawdzić czy granice obu obiektów kolidują ze sobą, dopiero później sprawdzić czy obiekty rzeczywiście kolidują. Taka granica to prostokąt obejmujący cały element. Takie sprawdzanie pozwala bardzo niskim kosztem oszacować czy dwa obiekty nie kolidują ze sobą.
2. Kod, który ma się wykonać w przypadku wykrycia kolizji jest bez sensu (chyba, że to tylko tymczasowe).
gangren90
ten kod przy wykryciu kolizji miedzy kulkami jest przykladowy nie mam pojecia jak to zrobic przerobilem juz sporo wariantów i wszystko wariowało albo nie odbijało się tak jak trzeba :/ może masz jakiś pomysł mógłbyś mi pomóc z tą pętlą żeby to wszystko dobrze współgrało

Kod
                    for (var i=0; i<kola.length; i++) {                
                        if( i != kol.id)
                        {
                            if(Math.sqrt(Math.pow(kol.x - kola[i].x , 2) + Math.pow(kol.y - kola[i].y , 2)) <= 80) {
                                
                                    kola.przex -= Math.sqrt(Math.pow(kol.przex - kola[i].przex, 2));
                                    kola.przey -= Math.sqrt(Math.pow(kol.przey - kola[i].przey, 2));
                            }
                        }
                            
                    
                    
                    }


zrobiłem taki warunek ale też dziwnie się pokazuje
Crozin
Zdefiniuj "odbijanie się jak trzeba".
gangren90
no kulka od kulki jak na stole bilardowym wink.gif
Kod
                    for (var i=0; i<kola.length; i++) {                
                        if( i != kol.id)
                        {
                            if(Math.sqrt(Math.pow(kol.x - kola[i].x , 2) + Math.pow(kol.y - kola[i].y , 2)) <= 80) {
                                a = kol.przex;
                                b = kol.przey;
                                kol.przex += kola[i].przex;
                                kol.przey += kola[i].przey;
                                kola[i].przex += a;
                                kola[i].przey += b;
                            }
                        }


to też nei działa :/
Crozin
Chyba nie zdajesz sobie sprawy z ilości różnego rodzaju sił, które trzeba uwzględnić nawet przy prostej "wizualizacji" stołu bilardowego. Domyślam się, że to o co pytasz to zderzenie sprężyste dwóch obiektów.

PS. http://stackoverflow.com/questions/345838/...on-and-handling
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.