C ++粒子系统的边界框不起作用

时间:2016-04-29 15:01:43

标签: c++ physics bounding-box particles particle-system

我使用Qt在c ++中创建了一个包含重力的粒子系统。我想包括一个边界框,以便系统也可以包含碰撞,但我似乎无法让它工作。这是我的.h代码:

DetailActivity

的.cpp:

typedef struct {
    int top;
    int bottom;
    int left;
    int right;

}BoundingBox;

BoundingBox makeBoundingBox(int top, int bottom, int left, int right);

然后我使用这个循环更新了我的发射器类中的边界框:

BoundingBox makeBoundingBox(int top, int bottom, int left, int right)
{
    BoundingBox boundingBox;
    boundingBox.top = top;
    boundingBox.bottom = bottom;
    boundingBox.left = left;
    boundingBox.right = right;

    return boundingBox;
}

并在我的窗口中设置了边界框:

for(int i=0; i<m_numParticles; ++i)
    {

        if (m_pos.m_y >= _boundingBox.top)
        {
            m_dir.m_y = (-1)*(m_dir.m_y);
        }

        if (m_pos.m_y <= _boundingBox.bottom)
        {
            m_dir.m_y = (-1)*(m_dir.m_y);
        }

        if (m_pos.m_x <= _boundingBox.left)
        {
            m_dir.m_x = (-1)*(m_dir.m_x);
        }

        if (m_pos.m_x >= _boundingBox.right)
        {
            m_dir.m_x = (-1)*(m_dir.m_x);
        }

        m_particles[i].update(m_gravity, _boundingBox);

我没有收到任何错误,但它似乎没有工作, 任何意见,将不胜感激 感谢

2 个答案:

答案 0 :(得分:0)

假设减少X意味着向左移动而减少Y意味着向上移动,您的条件似乎不正确。我还会在速度旁边更新位置,以确保它不会连续多次触发。

Y坐标的示例:

DateMidnight start = new DateMidnight("2010-01-01");
DateMidnight end = new DateMidnight("2011-01-07");

int days = Days.daysBetween(start, end).getDays();

答案 1 :(得分:0)

不应:

m_emitter->setBoundingBox(makeBoundingBox(m_height, 0, 0, m_width));

是:

m_emitter->setBoundingBox(makeBoundingBox(0, m_height, 0, m_width));