c++ - 指针问题(可能很容易)

标签 c++ pointers vector

这可能是非常基本的东西,但我似乎看不出我在哪里搞砸了。

我有一个 Cubes vector (抽象类 Node 的子类),每个都包含一个 body 对象,该对象包含其在平面上的位置的 x 和 z 位置。我试图以一种“跟随领导者”的方式移动每一个,其中 Cube 的新位置是前任之前所在的位置。

由于我正在使用指针,这是我目前有点困惑的地方,它们都指向同一个位置(snake.x 和snake.z 在哪里)所以我知道它们都指向同一 block 数据的。

想知道我需要改变什么,以便每个都反射(reflect)正确的坐标。

 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;
        }
    }
}

最佳答案

您将第一个 Cube 的位置分配给蛇的位置,然后之后的每个后续 Cube 都被分配到该位置。

基本上每次迭代你都这样做:

  current.position = previous.position. 
  previous = current;  // The "previous position" has been overwritten

  ... next iterationn ...

  current.position = previous.position; // previous.position is the new vlaue
  previous = current;

  ... 

您需要在分配之前临时保存以前的位置,否则所有内容都会被分配给该位置。

关于c++ - 指针问题(可能很容易),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33710669/

相关文章:

c++ - 比较 vector 中的子项

c - 在c中重建一个数组

c++ - 如何使用指向每个元素的指针 vector 删除 QCheckBoxes 数组?

c - 在文件中搜索字符串 (C)

c++ - 未找到子类的成员

c++ - 传递三重指针以在另一个函数中分配内存,sscanf异常

c++ - 不能在C++中的另一个对象中更改对象的属性

c++ - 无法运行 bjam 编译 boost python 教程

c++ - 帮助删除用户帐户的功能

c++ - 在旧式 main() 的参数中分解 WinMain 的 cmdLine