指针问题(可能很容易)
Pointer Issues (Probably Easy)
这可能是非常基本的东西,但我似乎看不出我在哪里搞砸了。
我得到了一个立方体向量(抽象类Node的子类),每个立方体都包含一个身体对象,该对象包含其在平面上位置的x和z位置。我试图以"追随领导者"的风格移动每一个立方体,立方体的新位置是前任的位置。
由于我使用的是指针,这是我现在有点困惑的地方,因为它们都指向同一个位置(无论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;
}
}
}
您将第一个多维数据集的位置分配给snake位置,然后随后的每个多维数据集都被分配给这个位置。
基本上,你正在做的每一次迭代:
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;
...
在分配之前,您需要临时保存上一个位置,否则所有内容都会分配给该位置。
您正在修改头,然后将任何后续元素设置为与头相同的值。
一个快速的解决方案是以相反的方式从下到上进行,这样当一个元素被赋予一个新值时,我们就知道不再需要它的旧值了。这是使用reverse_iterator
s:实现的
void updateChildren()
{
for(auto curNode = nodes.rbegin(); curNode!=nodes.rend()-1; ++curNode)
{
dynamic_cast<Cube*>(*curNode)->body.xPos = dynamic_cast<Cube*>(*(curNode+1))->body.xPos;
dynamic_cast<Cube*>(*curNode)->body.zPos = dynamic_cast<Cube*>(*(curNode+1))->body.zPos;
}
dynamic_cast<Cube*>(nodes.front())->body.xPos = snake.xPos;
dynamic_cast<Cube*>(nodes.front())->body.zPos = snake.zPos;
}
相关文章:
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- asio::read() 需要很长时间,使用 asio::write 没有问题
- Opengl问题:很可能是简单的纹理问题
- 给定一个无符号整数,很容易交换每个偶数位和奇数位。这可以推广到交换每个偶数和奇数n位吗?
- 我很难弄清楚我哪里出了问题
- SPOJ 问题 ADDREV - 添加反转数字(考虑到我的代码,我得到了一个错误的答案,这很荒谬......
- C 很容易使用枚举进行标志和位操作
- C++代码到Java,很少有问题
- C++,如果其他新文件出现问题,使用g++进行编译可以很好地工作
- C++:这个代码有什么问题吗?它编译得很好,但人们告诉我会有内存泄漏
- 为什么互斥体和条件变量很容易复制
- 简而言之,我真的很纠结语法,有人可以帮助我解决这个问题
- 真的很想解决地图的"常量"问题
- 有关在C++中为很酷的语言制作编译器的问题
- 选择一门语言学习真的很重要吗?他们都使用相似的技术来解决问题
- C++.Net程序集可以很容易地反编译吗
- 指针问题(可能很容易)
- 我可以很容易地创建一个模板函数,它接受任意类型的任意容器并对其进行操作
- 结构体向量的问题:解约束迭代器(可能很容易)
- 2D数组内存泄漏-应该很容易,我觉得愚蠢