0

我只是在寻找可以使此代码更好的任何建议。如果我以这种方式继续下去,我认为这是可以避免的大量代码,但现在我无法做到这一点。这将很快失去控制。

public enum PhysicMaterialType
{
    SoundFailure = 0,

    AsteroidBall,

    BalloonRubber
}

public void PlaySoundBasedOnCollision ( PhysicMaterialType phyMatA, PhysicMaterialType phyMatB )
{
    switch ( phyMatA )
    {
        case PhysicMaterialType.AsteroidBall:
            {
                CheckAsteroidBallCollision ( phyMatB );

                break;
            }
        case PhysicMaterialType.BalloonRubber:
            {
                CheckBalloonRubberCollision ( phyMatB );

                break;
            }
   }

}

void CheckAsteroidBallCollision ( PhysicMaterial phyMatB )
{
    switch ( phyMatB )

    {
        case PhysicMaterialType.AsteroidBall:
            {
                //Play AsteroidAsteroidBallSound

                break;
            }
        case PhysicMaterialType.BalloonRubber:

            {
                break;
            }
   }
}
4

1 回答 1

1

如果您将有很多类型,并且不同类型之间的预期碰撞声音必须以多种方式处理,请考虑为您要实现的每种类型从 PhysicMaterial 派生一个类。在派生类中定义一个公共方法来处理确定要播放的声音 - 将第二个对象的类型传递给此方法。像这样:

class PhysicMaterial
{
   public virtual string GetCollisionSound (PhysicMaterialType targetType)
   {
       // define default behavior here, if derived class doesn't need to do anything special
   }
}

class AsteroidBall : PhysicMaterial
{
   public override string GetCollisionSound (PhysicMaterialType targetType)
   {
       ...
   }
}

class BalloonRubber: PhysicMaterial
{
   public override string GetCollisionSound (PhysicMaterialType targetType)
   {
       ...
   }
}

返回最适合您的场景的任何数据类型。

于 2012-12-07T20:31:59.783 回答