Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用SFML减少向量中的值_C++_Sfml - Fatal编程技术网

C++ 使用SFML减少向量中的值

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

我使用带有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].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类。现在我更容易了。非常感谢。你真的解决了这个问题。我已经调查了很长时间。非常感谢。