jac*_*bot 2 c++ iterator collision-detection
首先,我是C++的新手!所以我有一个标准的对象列表,表示二维空间中的元素,我想做一些基本的碰撞检测.我的第一个想法(来自大多数Java背景......)是将每个对象与另一个对象进行比较,调用一个函数来检查每对或多个对象的交集.这在Java中很简单,取出ArrayList的第一项,将它与第二项,第三项等进行比较,然后取第二项,将它与第三项,第四项等进行比较.这是我采用的方法. C++中的问题,但我使用的是迭代器(而不是像我在Java中那样使用直接元素访问),但是迭代器应该是线性使用的,对吧?所以直接访问不合适.
所以我的问题是如何执行此算法?我也有理由相信这不是做(非常基本的)碰撞检测的最佳方法,所以对此的任何建议也会受到欢迎.这是我的(非工作)代码.
for (list<Box>::iterator p = mBoxes.begin(); p != mBoxes.end(); p++) {
for (list<Box>::iterator q = mBoxes.begin() + p); q != mBoxes.end(); q++) {
if (p->isIntersecting(q)) {
p->changeDirection();
q->changeDirection();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这应该说明我正在尝试的方法,但当然我的尝试mBoxes.begin() + p
不起作用!
编辑:回复多条评论.
for (list<Box>::iterator p = mBoxes.begin(); p != mBoxes.end(); ++p) {
for (list<Box>::iterator q = p); q != mBoxes.end(); ++q) {
if (p==q) continue;
if (p->isIntersecting(*q)) {
p->changeDirection();
q->changeDirection();
}
}
}
Run Code Online (Sandbox Code Playgroud)