首先,我對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