C++ 使用SFML减少向量中的值
我使用带有SFML的vector创建了5个数字,但我希望第二个数字以1秒的间隔一个接一个地下降。但是,前三名一个接一个地下降。我不明白为什么会发生这样的事情。你能帮我吗C++ 使用SFML减少向量中的值,c++,sfml,C++,Sfml,我使用带有SFML的vector创建了5个数字,但我希望第二个数字以1秒的间隔一个接一个地下降。但是,前三名一个接一个地下降。我不明白为什么会发生这样的事情。你能帮我吗 if (second == 1) { random.at(2)-=1; cout << random[2] << endl; text.setString(to_string(random[2])); text.setPosition(numbers[2].get
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();
}
if(秒==1)
{
随机。在(2)-=1;
我来帮你一把
下面是正在发生的事情:
在代码< >随机< /COD>数组中创建5个数字。您可能没有注意到,但是它们的编号是0到4(SFML是坐在C++上的,然后意味着数组在这里开始为零)。
每隔一秒钟,您就会更新存储在random
数组第三位的数字
然后它就出错了:不是更新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
if (second == 1)
{
random.at(2)-=1;
cout << random[2] << endl;
numbers[2].setString(to_string(random[2]));
clock.restart();
}
我不知道我说的有多清楚,但如果你看一下数组内容,你会发现通过在最后删除并创建一个新值,你在数组的[2-4]位置循环。这就是为什么在gif中不是所有数字都更新错了,只有3个
显而易见的解决方案是停止擦除和向后推数字
数组。你可以用更新随机
数组的方法来更新它。这样就可以了
像这样:
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
if (second == 1)
{
random.at(2)-=1;
cout << random[2] << endl;
numbers[2].setString(to_string(random[2]));
clock.restart();
}
if(秒==1)
{
随机。在(2)-=1;
我喜欢SFML!如果你能为你的问题提供一个答案,那将非常有帮助。事实上,我在上面分享的最简单的程序示例是GIF。为了让它更简单一点:我会说,随机命名向量的第二个元素的值每秒钟都会减少,然后将其放回第二个元素,即“替换”或“替换”“插入"。因此,只有第二个元素的值会下降,但如果你看GIF,前三个元素的值会下降。我的英语不好,我想我不能告诉你更多。对不起我之前的评论,顺便说一句,经过深入分析后,我意识到你确实无法将其缩短,而且你在选择后也提供了尽可能多的信息这是这篇文章最重要的部分。干得好。非常感谢你,你很感兴趣。你告诉我的很好。(我可能写错了什么,因为我的英语不好。)但我不知道如何更新。你能给我一个非常简单的例子吗?如果你只想使用随机数组中具有相同索引的项来更新数字数组的现有项(我将更新索引2处的项作为示例,因此你可能需要修改代码),你可以这样做:numbers.at(2)=to_string(random[2]);
“无运算符”=“与这些操作数匹配”但是我会尝试的。我再次非常感谢。我用一个代码片段更新了答案。我没有注意到text
来自SFML text类。现在我更容易了。非常感谢。你真的解决了这个问题。我已经调查了很长时间。非常感谢。