Я создал систему частиц в C++ с использованием Qt, которая включает в себя гравитацию. Я хотел бы включить ограничительную рамку, чтобы система могла также включать столкновения, но я не могу заставить ее работать. Вот мой .h код:Ограничительная коробка для системы частиц C++ не работает
typedef struct {
int top;
int bottom;
int left;
int right;
}BoundingBox;
BoundingBox makeBoundingBox(int top, int bottom, int left, int right);
.cpp:
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);
И еще установить ограничительная коробка в моем окне:
m_emitter->setBoundingBox(makeBoundingBox(m_height, 0, 0, m_width));
Я не получаю никаких ошибок, однако он не кажется, работает, Любые советы будут оценены Спасибо
Что значит "не работает" означает в этом контексте? Будьте осторожны с простыми испытаниями в полевых коробках в физике. Для них возможно идти прямо друг к другу, если скорость равна размеру коробки. – Robinson
Я бы поставил в вашей функции некоторые утверждения cout, которые проверяют наличие конфликтов, чтобы узнать, какие цифры вы получаете, и посмотрите, действительно ли ваши операторы if верны. Вы делаете преобразования на самих частицах? Если это так, проверьте, чтобы ваши преобразования также применялись к ограничивающим прямоугольникам – element11