首先,我对C++很陌生!所以我已经有了一个标准的2d空间元素列表,我想做一些基本的碰撞检测。我的第一个想法(来自大多数Java背景......)是将每个对象与其他对象进行比较,调用一个函数来检查每个对或对象上的交集。这在Java中很简单,将ArrayList的第一项与第二项,第三项等进行比较,然后将第二项与第三项,第四项等进行比较。这是我采用的方法问题在C++中,但我使用的是一个迭代器(而不是象我在Java中那样直接访问元素),但是迭代器可以线性使用,对吧?所以直接访问是不合适的。用于碰撞检测的C++双迭代器循环
所以我的问题是如何执行此算法?我也有理由相信,这不是检测碰撞的最佳方式(非常基本),所以对此的任何建议都会受到欢迎。这是我的(非工作)代码。
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
不起作用!
只是一个建议,当处理迭代器时,更喜欢前缀++而不是后缀(性能明智),所以在你的循环中它应该是:++ q和++ p – snoofkin 2011-04-25 19:58:21
注明以备将来使用! – jackbot 2011-04-25 20:08:53
还有一个建议:如果你想使用索引而不是interator,考虑'std :: vector'而不是'std :: list.' – 2011-04-25 20:14:04