我试图迭代一个对象向量并执行一个简单的更新函数,该函数每次将对象向右移动 1 个像素。但是,当我运行代码时,x 值仅更改一次。
在 source.cpp 中:
for (int i = 0; i < Screen::SCREEN_WIDTH * Screen::SCREEN_HEIGHT; i++) {
people.push_back(Person());
}
for (int i = 0; i < 1; i++) {
people[i].isAlive = true;
}
while(true) {
for (Person p : people) {
if (p.isAlive == true) {
p.Update(p);
cout << p.x << endl;
screen.setPixel(p.x, p.y, 255, 0, 0);
}
else {
screen.setPixel(p.x, p.y, 0, 0, 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
亲自.cpp
void Person::Update(Person &person) {
person.x += 1;
Run Code Online (Sandbox Code Playgroud)
}
如您所见,我从数组中选择一个人并将其设置为活着的,因此被绘制。它们每帧都被绘制,但不会更新。谁能帮我解决这个问题?
for (Person p : people)创建向量的每个元素的副本,然后您正在修改对向量中的原始对象没有影响的副本。你想要的是for (Person& p : people)。
顺便说一句:endl除非您真的需要立即清除输出,否则您应该避免使用。相反,在大多数情况下,您应该只输出'\n'.
| 归档时间: |
|
| 查看次数: |
6525 次 |
| 最近记录: |