Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> odbijające się od siebie piłeczki js canvas
gangren90
post 6.01.2013, 18:47:49
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 6.01.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Crozin
post 6.01.2013, 20:25:28
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
gangren90
post 6.01.2013, 20:40:17
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 6.01.2013

Ostrzeżenie: (0%)
-----


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


Ten post edytował gangren90 6.01.2013, 20:43:17
Go to the top of the page
+Quote Post
Crozin
post 6.01.2013, 21:57:41
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Zdefiniuj "odbijanie się jak trzeba".
Go to the top of the page
+Quote Post
gangren90
post 6.01.2013, 21:59:10
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 6.01.2013

Ostrzeżenie: (0%)
-----


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 :/
Go to the top of the page
+Quote Post
Crozin
post 6.01.2013, 22:16:14
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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

Ten post edytował Crozin 6.01.2013, 22:20:55
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 1.05.2025 - 05:25