這可能是一個非常基本的東西,但我似乎無法看到我搞亂了什麼。指針問題(可能很容易)
我有一個Cubes(抽象類Node的子類)的向量,每個Cubes都擁有一個包含其在飛機上的位置的x和z位置的body對象。我試圖把每個人都變成一個「跟隨領導者」的風格,其中一個立方體的新位置就是前任之前的位置。
由於我使用的是指針,因此我現在有點困惑,它們都處於相同的位置(無論是snake.x還是snake.z),所以我知道它們都指向到同一條數據。
不知道我需要改變,以便每個反映正確的座標。
void updateChildren()
{
Node * prevPiece;
typedef std::vector<Node*>::iterator It;
for(It curNode=nodes.begin(); curNode!=nodes.end(); ++curNode)
{
if (curNode == nodes.begin())
{
prevPiece = *curNode;
dynamic_cast<Cube*>(*curNode)->body.xPos = snake.xPos;
dynamic_cast<Cube*>(*curNode)->body.zPos = snake.zPos;
}
else
{
Node * tmp = *curNode;
dynamic_cast<Cube*>(*curNode)->body.xPos = dynamic_cast<Cube*>(prevPiece)->body.xPos;
dynamic_cast<Cube*>(*curNode)->body.zPos = dynamic_cast<Cube*>(prevPiece)->body.zPos;
prevPiece = tmp;
}
}
}
我不知道如果是這樣的問題,但如果對象是錯誤的類型(在這種情況下不是一個立方)的dynamic_cast的可以返回一個'nullptr'。這應該總是被檢查。 – Arne
這只是一個交換問題。 – erip
您將每個位置設置爲前一個位置,但是隻有在更新之前的位置到位於其前面的位置之後。如果按相反順序(rbegin,rend)執行此操作,它將按照從尚未訪問的節點讀取的方式工作。您也可以改爲存儲前一個節點的位置而不是節點指針,然後再修改它。 – dascandy