我使用带有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();
}
我帮你。
这是正在发生的事情:
random
数组中创建5个数字。您可能没有注意到它,但是它们的编号为0到4(SFML位于C ++上,然后意味着此处的数组从零开始)。random
阵列的第3位存储的数量。numbers
和push_back
循环更新erase
数组中的相应数字。[在这里了解我:push_back
在向量的末尾创建一个新元素,而erase
从向量中删除一个元素然后“分类”,因此向量的索引中没有数字间隔。] >
有效地,您正确地处理了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中,并非所有数字都被错误地更新,只有三个是错误的。
显而易见的解决方案是停止擦除并推回numbers
阵列。您可以用更新random
数组的相同方式更新它。会没事的。