我在哪里存储一个作用于对象数组的函数?

时间:2013-09-12 19:11:38

标签: function class simulation particles

我正在尝试使用c ++创建类似下面的内容:

enter image description here

我有一个名为 particle 的类,它将存储每个粒子的位置,速度。此外,成员函数将使用速度数据更新粒子的位置。

我也在尝试编写一个能够检测粒子与盒子边界之间碰撞的函数。为此,此功能需要访问每个粒子的位置和速度。因此,该函数需要将整个粒子阵列作为参数。但是,此函数不能作为粒子类的成员函数存在,因为它不能访问所有粒子。

问题:我在哪里包含碰撞检测功能,以便它是粒子类的可扩展部分?

我考虑过在main.cpp文件中编写这个函数,但我对这是否符合OOP指南没有丝毫的线索。理想情况下,可能还有其他函数也会对粒子数组起作用。

3 个答案:

答案 0 :(得分:0)

你想要的可能是某种“ParticleContainer”对象,它包含粒子数组,并在粒子系统上作为一个整体执行操作。

(这也是你将代码放在数组中并调用“Draw”函数的地方。)

答案 1 :(得分:0)

我想好的想法是将检测函数声明为类粒子的朋友:它可以访问类中的所有成员。然后你可以在某种管理器函数的循环里面激活这个函数,它将计算数组中所有粒子的碰撞。在此

void CollisionMgr(particleClass *ParticleArrayPtr, int NumOfParticles)
{
   while(NumOfParticles)

    {
      CollisionOfParticle(*ParticleArrayPtr, NumOfParticles);
      NumOfParticles--;
    }

}

答案 2 :(得分:0)

我倾向于沿着这些方向使用模式:将所有模型状态保存在一个名为ModelEnvironment的类中;有一个单独的类Renderer知道如何绘制模型状态;有一个System类,将这些联系在一起。以下是高度缩写,但希望提出这个想法:

class Box {};

class Location {};

class Particle
{
public:
    void updatePosition(double dt);
    const Location& getLocation();
};

class Environment
{
public:
    void checkForCollisions();
private:
    Box box;
    std::vector<Particle> particles;
};

class Renderer
{
public:
    void render(Environment& environment);
};

class System
{
    Environment environment;
    Renderer renderer;
};