C ++ SFML阵列[5]在for循环window.display串,只显示线1,3,5(c++

2019-10-21 15:39发布

你必须原谅我,如果我无法解释自己正确,我试图创建一个使用C ++ SFML字符串数组高分表。 我试图分别画他们使用window.draw(array[1],array[2]等。

但是,如果我把阵列中的for循环和使用int变量,它仅汲取阵列1,3和5。

for(cnt = 0;cnt <5;cnt++)
    {
        thiswindow.draw(topscores[cnt]);
        thiswindow.draw(topnames[cnt]);
        thiswindow.display();
    }

Answer 1:

就拿显示出循环。 这应该可以解决这个问题。



Answer 2:

正如Rosme指出RenderWindow::display不应该在循环中调用。 其实, RenderWindow::display应该永远只能称为每次呈现的内容的框架一旦... SFML使用双缓冲 ,和RenderWindow::display是切换后缓冲器中的命令。 让我们花点时间来讨论这是如何工作:

当你图中的双缓冲系统的内容,你实际绘制到两个单独的表面(“缓冲器”) - 在任何给定时间一个是隐藏的(缓冲器中抽签发生),并示出了一个在屏幕上。 目前用于绘制隐藏缓冲区被称为“后缓冲区”。 当RenderWindow::display被调用(或与其等值的其他双缓冲系统)当前显示在屏幕上的缓冲器成为新的后缓冲器,并且被显示在屏幕上的旧后缓冲器。 这可以让你做很多的变化与流行的插件,撕裂,或闪烁的风险更小 - 你从来没有画到正在显示的缓冲。

有了这些知识,你应该明白发生了什么事的循环中显示通话的结果:

instruction  |  back buffer  |  front buffer (shown)
----------------------------------------------------
             |  (empty)      |  (empty)
draw A       |  A            |  (empty)
display      |  (empty)      |  A
draw B       |  B            |  A
display      |  A            |  B
draw C       |  A, C         |  B
display      |  B            |  A, C
draw D       |  B, D         |  A, C
display      |  A, C         |  B, D
draw E       |  A, C, E      |  B, D
display      |  B, D         |  A, C, E

因此,循环完成后,您会看到绘制的第一,第三和第五项。 其他人被画为好,但在后缓冲器,他们无法看到存在。



文章来源: c++ sfml array[5] of strings in for loop window.display, only showing line 1,3,5
标签: c++ arrays sfml