Polymorfism, arv och overloading (c++)
Hej hej!
Jag håller på att experimentera med att göra en egen liten händelsebaserad 2d spelmotor (som ska vara enkel att implementera). Jag har lite problem med att "rätt" funktion skall anropas vid kollision. Då kod säger mer än 1000 ord så ger jag ett exempel:
/* Kod från motorn */
class Object
{
public:
virtual void Collision(Object *other)
{
}
};
/* Kod som använder motorn */
class Ball : public Object
{
};
class Wall : public Object
{
public:
void Collision(Ball* other)
{
//Denna vill jag ska köras då other "egentligen" är Ball*
}
void Collision(Wall* other)
{
//Denna ska köras om det var en vägg som vi kolliderade med (vilket det inte var)
}
void Collision(Object* other)
{
//Denna skall köras om ingen annan passar, men som det är nu så körs ju endast denna
}
};
int main(int argc, char* argv[])
{
//Dessa ligger igentligen i en lista
Object* enBoll = new Ball();
Object* enVagg = new Wall();
//Här körs lite kod som kollar efter kollisioner, när den hittar en kollision så anropas kollisionsfunktionen på vardera objekt
enVagg->Collision(enBoll);
enBoll->Collision(enVagg);
return 0;
}
Ett sätt vore att försöka kasta dem till respektive typ och sedan köra rätt funktion. Men jag vill ju inte att användaren av motorn skall behöva kasta och krångla. Det bästa vore om motorn kunde lösa alla dessa problem. Hur ska jag göra så att rätt funktion anropas?
Hur kan jag göra ett finare kollisions api?
PS.
Reserverar mig för eventuella fel som jag har gjort så här på natten.
Är tacksam för alla idéer och förslag.
citera!