![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
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). |
|
|
![]()
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 |
|
|
![]()
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".
|
|
|
![]()
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
![]() 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 :/ |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 1.05.2025 - 05:25 |