物体放在一个vector中,只有指向基类的指针,任意两个物体A,B碰撞,先找出A,B真实指向的物体类型,利用多态,this指针,然后碰撞检测。
vector<Collider> cs;
Collider *colliderA; //Cube
Collider *colliderB; //Sphere
class Collider
{
virtual void ColliderDispatch(Collider *b, PositionBasedDynamics &pbd) = 0;
virtual void ColliderDispatch(ParticleCollider *B, PositionBasedDynamics &pbd) = 0;
virtual void ColliderDispatch(CubeCollider *B, PositionBasedDynamics &pbd) = 0;
};
class SphereCollider : public Collider
{
void ColliderDispatch(Collider *b, PositionBasedDynamics &pbd)
{
b->ColliderDispatch(this, pbd);
}
void ColliderDispatch(ParticleCollider *B, PositionBasedDynamics &pbd) override;
void ColliderDispatch(CubeCollider *B, PositionBasedDynamics &pbd) override;
};
class CubeCollider : public Collider
{
void ColliderDispatch(Collider *b, PositionBasedDynamics &pbd)
{
b->ColliderDispatch(this, pbd);
}
void ColliderDispatch(ParticleCollider *B, PositionBasedDynamics &pbd) override;
void ColliderDispatch(CubeCollider *B, PositionBasedDynamics &pbd) override;
};
第一次,找出A的真实物体类型
colliderA->ColliderDispatch(colliderB);
colliderA 成员函数,this指针真实子类CubeCollider
void ColliderDispatch(Collider *b)
{
b->ColliderDispatch(this);
}
第二次,找出B的真实物体类型 colliderB 成员函数
void ColliderDispatch(CubeCollider *b)
{
SphereCubeIntersect(...);
}