使用 SFML 降低向量中的值
Decreasing value in vectors with SFML
我使用带有 SFML 的向量创建了 5 个数字,但我希望第二个数字以 1 秒的间隔一个一个下降。只是,他们前三名一一陨落。我不明白为什么会发生这样的事情。你能帮帮我吗?
if (second == 1)
{
random.at(2)-=1;
cout << random[2] << endl;
text.setString(to_string(random[2]));
text.setPosition(numbers[2].getPosition().x, numbers[2].getPosition().y);
numbers.push_back(text);
numbers.erase(numbers.begin() + 2);
clock.restart();
}
The program gif
我来帮你。
这是正在发生的事情:
- 您在
random
数组中创建了 5 个数字。你可能没有注意到,但它们的编号是 0 到 4(SFML 位于 C++ 上,然后这意味着数组在这里从零开始)。
- 每一秒,您都会更新
random
数组第 3 位的库存数量。
- 然后就出错了:你没有更新
numbers
数组中的相应数字,而是用push_back
和erase
循环它。
在这里理解我:push_back
在向量的末尾创建一个新元素,而 erase
从向量中删除一个元素然后 "sort out things" 所以没有数字差距向量的索引。
实际上,您正在正确处理 random
,但是当您尝试更新 number
时,您会循环执行它。像这样:
seconds: 1 2 3 4 5 6
array content: 0 0 0 0 0 0
(vertical) 1 1 1 1 1 1
2 3 4 5 6 7
3 4 5 6 7 8
4 5 6 7 8 9
我不确定我说的有多清楚,但是如果您查看数组内容,您会发现通过在末尾擦除并创建一个新值,您正在循环遍历这些位置数组的[2-4]。这就是为什么在你的 gif 中并不是所有的数字都更新错误,只有 3 个。
显而易见的解决方案是停止擦除和推回 numbers
数组。您可以像更新 random
数组一样更新它。会好的。
像这样:
if (second == 1)
{
random.at(2)-=1;
cout << random[2] << endl;
numbers[2].setString(to_string(random[2]));
clock.restart();
}
玩得开心。
我使用带有 SFML 的向量创建了 5 个数字,但我希望第二个数字以 1 秒的间隔一个一个下降。只是,他们前三名一一陨落。我不明白为什么会发生这样的事情。你能帮帮我吗?
if (second == 1)
{
random.at(2)-=1;
cout << random[2] << endl;
text.setString(to_string(random[2]));
text.setPosition(numbers[2].getPosition().x, numbers[2].getPosition().y);
numbers.push_back(text);
numbers.erase(numbers.begin() + 2);
clock.restart();
}
The program gif
我来帮你。
这是正在发生的事情:
- 您在
random
数组中创建了 5 个数字。你可能没有注意到,但它们的编号是 0 到 4(SFML 位于 C++ 上,然后这意味着数组在这里从零开始)。 - 每一秒,您都会更新
random
数组第 3 位的库存数量。 - 然后就出错了:你没有更新
numbers
数组中的相应数字,而是用push_back
和erase
循环它。
在这里理解我:push_back
在向量的末尾创建一个新元素,而 erase
从向量中删除一个元素然后 "sort out things" 所以没有数字差距向量的索引。
实际上,您正在正确处理 random
,但是当您尝试更新 number
时,您会循环执行它。像这样:
seconds: 1 2 3 4 5 6
array content: 0 0 0 0 0 0
(vertical) 1 1 1 1 1 1
2 3 4 5 6 7
3 4 5 6 7 8
4 5 6 7 8 9
我不确定我说的有多清楚,但是如果您查看数组内容,您会发现通过在末尾擦除并创建一个新值,您正在循环遍历这些位置数组的[2-4]。这就是为什么在你的 gif 中并不是所有的数字都更新错误,只有 3 个。
显而易见的解决方案是停止擦除和推回 numbers
数组。您可以像更新 random
数组一样更新它。会好的。
像这样:
if (second == 1)
{
random.at(2)-=1;
cout << random[2] << endl;
numbers[2].setString(to_string(random[2]));
clock.restart();
}
玩得开心。