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++ - 神秘的200连接来自何处?

c++ - Avl 树删除中哪个子树的优先级更高

c - 在 C 中递增 NULL 指针

c++ - 引用一个未刷新的指针

c++ - 映射/折叠运算符(在c++中)

c++ - 使用“--enable-vtable-verify”构建Devtoolset 7 gcc

c++ - 检查函数指针类型

c - 将 256 位 AVX vector 存储为无符号长整数的最佳方法

c++ - 将vector <std::unique_ptr <A >>转换为vector <A>

c++ - 如何在 vector (C++)中找到最大元素?