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 からクラスを派生させることを検討してください。派生クラスでパブリック メソッドを定義して、再生するサウンドの決定を処理します。2 番目のオブジェクトの型をこのメソッドに渡します。このような:

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 に答える