首先,我对C++还是很陌生!因此,我有一个标准的对象列表,用于表示2d空间中的元素,并且我想进行一些基本的碰撞检测。我的第一个想法(主要来自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();
}
}
}
这应该可以说明我正在尝试的方法,但是我对
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();
}
}
}