考虑到我有一个对称的关系矩阵,类似于:
除了每个“结果”都是一小段代码。
我的场景:我有一堆Entity
相互“碰撞”的物体。每个实体都有一个CollisionType
值(枚举)。在设计中,存在一个关系矩阵,它描述了当不同的 CollisionType 相互相遇时实体的行为。
我想知道:我将如何以一种易于添加新 CollisionTypes 的干净且高性能的方式表示关系,并在其之上实现逻辑?在我看来,它看起来像是一个 2D Switch 语句。
示例(差)解决方案:
void CollideEntities( Entity e1, Entity e2 ) {
CollisionType t1 = e1.GetCollisionType();
CollisionType t2 = e2.GetCollisionType();
// perform basic logic based on t1 & t2
if ( (t1 == COL_SOLID && t2 == COL_SQUISHY) || (t1 == COL_SQUISHY && t2 == COL_SOLID) ) {
// do stuff..
} else if ( (t1 == COL_SOLID && t2 == COL_DAMAGE) || (t1 == COL_DAMAGE && t2 == COL_SOLID) ) {
// do other stuff..
} // and so on...
}
许多潜在的解决方案对我来说是显而易见的,但没有一个让我觉得特别干净、高效或易于添加新类型......