0

我有一个我正在开发的游戏,我将粒子效果作为一个单独的类

    public class Explosion 
    {
         private List<Particle> Particles; 
         private const int particle_Count = 100; 
         public Explosion(Vector2 location) { 
               Random random = new Random(); 
               Particles = new List<Particle>(particle_Count);
               for(int i = 0; i < particle_Count; i++)
                   Particles.add(new Particle(location, new Vector2(random.NextDouble() * i,
                       random.NextDouble() * i)); 
         }
    }

现在,我的游戏中需要有几种不同类型的爆炸,但它们的变化很小(实际上是一个 Vector2 对象之间的区别(它只是一个存储两个坐标和一些辅助函数的对象)不熟悉 XNA))

我的问题是,因为 Random 只能在我进入构造函数后才能访问,我如何对这种爆炸进行变化?

我应该为每次爆炸创建一个新课程吗?(这似乎没有必要,因为爆炸之间的变化很小)

我是否应该重载函数以为每个不同的爆炸采用单独的参数(可能是 int)?

我是否应该通过构造函数直接传递 Vector2 (这对我来说似乎会破坏良好的 OOP 原则)

还是有另一种方法可以解决这个问题,我只是没有看到。

任何帮助将不胜感激,我喜欢第一次做正确的事情,这是我申请的重要组成部分。

谢谢。

4

1 回答 1

3

由于每个变体之间只有一个参数差异,因此最好的方法是将另一个参数传递给构造函数(如您所述)。只需传递您需要的最少信息;如果你愿意,可以给它一个默认值,这样就不需要了:

public Explosion(Vector2 location, int velocity = 1) { 
}

如果它是一个复杂的对象,而不仅仅是一个 int,那么考虑制作某种辅助方法:

public class Explosion
    public Explosion(Vector2 location, Velocity velocity) { 
    }
}

public class Velocity {
    public static Velocity Get(int a, int b) {
        // construct the velocity as needed
    }
}

这样调用 Explosion 的构造函数就不必太麻烦了:

var explosion = new Explosion(vectorLocation, Velocity.Get(5, 10));
于 2012-12-01T12:01:07.400 回答