Cześć,
Mam do was takie pytanie:
mam klasę abstrakcyjną figura oraz dwie inne klasy prostokąt i koło. Zastanawiam się teraz jak zrobić funkcję kolizji tych dwóch obiektów? Tzn. chodzi mi o to, że klasa koło nie wie, czy zderzy się z innym kołem czy z prostokątem i teraz pytanie jak to zaimplementować? Oczywiście mogę zrobić dla każdej figury jakiś index i sprawdzać przy zderzeniu, jaki obiekt zderzył się z jakim (np. czy koło z prostokątem czy z innym kołem) ale czy nie ma innego sposobu?
Innymi słowy można to rozwiązać np. tak:
class Figura
{
public:
virtual bool kolizja(Figura* figura) = 0;
int index;
};
class Prostokat
{
public:
//index = 0;
float top, left, right, bottom; //współrzędne prostokąta na osiach
bool kolizja(Figura* figura)
{
switch(figura->index)
{
case 0: //gdy kolizja jest np. z prostokątem
//...
break;
case 1: //gdy kolizja jest np. z kołem
//...
break;
//itd.
}
}
};
class kolo
{
public:
float promien, srodek_x, srodek_y; //promien okręgu oraz współrzędne środka koła
//index = 1;
bool kolizja(Figura* figura)
{
switch(figura->index)
{
case 0: //gdy kolizja jest np. z prostokątem
//...
break;
case 1: //gdy kolizja jest np. z kołem
//...
break;
//itd.
}
}
};
Ale ten sposób wydaje mi się trochę nieelegancki...
Tzn. źle się wyraziłem - chodzi mi o sprawdzenie czy kolizja w ogóle nastąpiła między dwoma obiektami