我正在尝试使用c ++创建类似下面的内容:
我有一个名为 particle 的类,它将存储每个粒子的位置,速度。此外,成员函数将使用速度数据更新粒子的位置。
我也在尝试编写一个能够检测粒子与盒子边界之间碰撞的函数。为此,此功能需要访问每个粒子的位置和速度。因此,该函数需要将整个粒子阵列作为参数。但是,此函数不能作为粒子类的成员函数存在,因为它不能访问所有粒子。
问题:我在哪里包含碰撞检测功能,以便它是粒子类的可扩展部分?
我考虑过在main.cpp文件中编写这个函数,但我对这是否符合OOP指南没有丝毫的线索。理想情况下,可能还有其他函数也会对粒子数组起作用。
答案 0 :(得分:0)
你想要的可能是某种“ParticleContainer”对象,它包含粒子数组,并在粒子系统上作为一个整体执行操作。
(这也是你将代码放在数组中并调用“Draw”函数的地方。)
答案 1 :(得分:0)
我想好的想法是将检测函数声明为类粒子的朋友:它可以访问类中的所有成员。然后你可以在某种管理器函数的循环里面激活这个函数,它将计算数组中所有粒子的碰撞。在此
void CollisionMgr(particleClass *ParticleArrayPtr, int NumOfParticles)
{
while(NumOfParticles)
{
CollisionOfParticle(*ParticleArrayPtr, NumOfParticles);
NumOfParticles--;
}
}
答案 2 :(得分:0)
我倾向于沿着这些方向使用模式:将所有模型状态保存在一个名为Model
或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;
};