Function 在哪里存储作用于对象数组的函数?
我正在尝试使用c++创建如下内容: 我有一个名为“粒子”的类,它将存储每个粒子的位置和速度。此外,成员函数将使用速度数据更新粒子的位置 我还试图编写一个函数,用于检测粒子与长方体边界之间的碰撞。为此,此函数需要访问每个粒子的位置和速度。因此,函数需要将整个粒子阵列作为参数。但是,此函数不能作为粒子类的成员函数存在,因为这样它就无法访问所有粒子 问题:我在哪里包括碰撞检测功能,使其成为粒子类的可扩展部分?Function 在哪里存储作用于对象数组的函数?,function,class,simulation,particles,Function,Class,Simulation,Particles,我正在尝试使用c++创建如下内容: 我有一个名为“粒子”的类,它将存储每个粒子的位置和速度。此外,成员函数将使用速度数据更新粒子的位置 我还试图编写一个函数,用于检测粒子与长方体边界之间的碰撞。为此,此函数需要访问每个粒子的位置和速度。因此,函数需要将整个粒子阵列作为参数。但是,此函数不能作为粒子类的成员函数存在,因为这样它就无法访问所有粒子 问题:我在哪里包括碰撞检测功能,使其成为粒子类的可扩展部分? 我想在main.cpp文件中编写这个函数,但我丝毫不知道它是否符合OOP准则。理想情况下,
我想在main.cpp文件中编写这个函数,但我丝毫不知道它是否符合OOP准则。理想情况下,可能还有其他函数也作用于粒子阵列。可能您想要的是某种“ParticleContainer”对象,它保存粒子阵列,并对整个粒子系统执行操作
(这也是您将运行数组并调用“Draw”函数的代码的地方。)我想最好将检测函数声明为类粒子的朋友:它可以访问类中的所有成员。然后可以在某种管理器函数的内部循环中启动此函数,该函数将计算与阵列中所有粒子的碰撞。在这个
void CollisionMgr(particleClass *ParticleArrayPtr, int NumOfParticles)
{
while(NumOfParticles)
{
CollisionOfParticle(*ParticleArrayPtr, NumOfParticles);
NumOfParticles--;
}
}
我倾向于使用这样一种模式:将所有模型状态保存在一个名为
model
或Environment
的类中;有一个单独的类渲染器
,它知道如何绘制模型状态;拥有一个系统
类,将它们联系在一起。以下是高度缩写,但希望能给出一个想法:
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;
};
类框{};
类位置{};
类粒子
{
公众:
无效更新位置(双dt);
const Location&getLocation();
};
课堂环境
{
公众:
void checkForCollisions();
私人:
盒子;
向量粒子;
};
类渲染器
{
公众:
无效渲染(环境和环境);
};
阶级制度
{
环境;
渲染器渲染器;
};
无论“拥有”粒子的是什么,都可能是放置粒子碰撞检测的地方。在这种情况下,任何人都拥有粒子列表并负责管理它们。(和+1,这是我很久以来在一个问题中看到的你试图做的最真实的例子)。以什么方式扩展?“显而易见”的答案是一个静态成员函数,但它可能取决于此粒子
类的角色(主要是,它是否设计为用作基类),以及您希望如何表示边界框。还要注意,很多C++代码(也许是大多数),以及几乎所有的C++标准库,都是在没有遵循OOP指导原则的情况下设计的。C++允许其他编程范例,而不仅仅是面向对象编程。