Witam
Tak jak w temacie mam problem z grą typu "ping-pong", mianowicie detekcja zderzeń działa jak należy - kulka odbija się od paletki zarówno od jej wszystkich krawędzi jak i rogów, jednakże pojawia się problem przy zderzeniu kulki z górną oraz dolną częścią paletki (wliczając też w sumie rogi) w trakcie jej ruchu (paletka porusza się w górę oraz w dół po przyciśnięciu odpowiednich klawiszy).
Kulka tak jakby wbija się w paletkę (gdzie też prawdopodobnie odbija się w niej ileś tam razy) i dopiero po pewnym czasie "odbija się" od niej.
Próbowałem tworzyć instrukcje warunkowe, gdzie np. przy ruchu paletki w górę dodawałem po odbiciu kulki od górnej części paletki wartość wektora prędkości paletki (0,-1) do wektora prędkości kulki vy i po czym odwracałem ten wektor (na zasadzie kąt padania = kąt odbicia). Oto fragment kodu dla detekcji zderzenia kulki z górną częścią paletki i jej obsługi.
y,vy,r - to pozycja y w osi kulki, jej prędkość wektora vy i promień
arg2 - to wartość y paletki
arg1 - wartość x paletki (dodam, że te dane aktualizują się)
p_y - zmienna pomocnicza, jeżeli naciskamy np. W (czyli poruszamy paletką w górę), to wynosi ona -1, jako, że y paletki maleje, a więc paletka jest w ruchu (tj. wektor predkosci paletki)
if(y+vy+r>=arg2+p_y && y<arg2+p_y && x>=arg1 && x<=arg1+20){ //GORA
/* sprawdzamy czy, kulka znajduje sie w obszarze nie wiekszym niz gorny brzeg paletki i tez mniejszym
jak rowniez sprawdzamy czy kulka znajduje sie miedzy lewa a prawa krawedzia paletki
staralem sie dodawac p_y zeby przy kolejnej klatce moc lepiej wykryc kolizje */
if(dir==4){ // vx rosnie i vy rosnie
vy*=-1;
play_sample(dzwiek_odbicia_od_sciany, 155,127,1000,0);
}
else if(dir==3){ // vx maleje i vy rosnie
vy*=-1;
play_sample(dzwiek_odbicia_od_sciany, 155,127,1000,0);
}/*
if(p_y>0) vy+=1.0; //odtad wlasnie probowalem cos zdzialac, ale na marne (ten 1-szy warunek jest tez w sumie i
//nie potrzebny, bo pilka dobrze sie odbija od paletki jadacej w dol (pilka leci z gory)
else if(p_y<0) vy-=1.0;
*/
Pozdrawiam i mam nadzieję, że w miarę wytłumaczyłem na czym polega mój problem.