3

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

在此处输入图像描述

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

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

问题:我在哪里包含碰撞检测功能,使其成为粒子类的可扩展部分?

我想过在我的 main.cpp 文件中编写这个函数,但我一点也不知道这是否符合 OOP 准则。理想情况下,可能还有其他函数也作用于粒子阵列。

4

3 回答 3

0

我倾向于使用以下模式:将所有模型状态保存在一个名为Modelor的类中Environment;有一个单独的类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;
};
于 2013-10-08T05:33:37.110 回答
0

您可能想要的是某种“ParticleContainer”对象,它保存粒子数组,并对整个粒子系统执行操作。

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

于 2013-09-12T19:15:24.227 回答
0

我想这个好主意是将检测函数声明为类粒子的朋友:它将可以访问类中的所有成员。然后,您可以在某种管理器函数内循环触发此函数,该函数将计算与数组中所有粒子的碰撞。在这个

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

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

}
于 2013-09-12T19:19:41.197 回答