SFML向量中的递减值

问题描述 投票:1回答:1

我使用带有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

Full code

c++ sfml
1个回答
0
投票

我帮你。

这是正在发生的事情:

  1. 您在random数组中创建5个数字。您可能没有注意到它,但是它们的编号为0到4(SFML位于C ++上,然后意味着此处的数组从零开始)。
  2. 每秒,您更新random阵列的第3位存储的数量。
  3. 然后出错:您没有使用numberspush_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数组的相同方式更新它。会没事的。

© www.soinside.com 2019 - 2024. All rights reserved.