我使用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);
我没有收到任何错误,但它似乎没有工作, 任何意见,将不胜感激 感谢
答案 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));