for 循环 window.display 中字符串的 c++ sfml 数组 [5],仅显示第 1、3、5 行
c++ sfml array[5] of strings in for loop window.display, only showing line 1,3,5
如果我无法正确解释自己,您将不得不原谅我,我正在尝试使用 C++ sfml 字符串数组创建高分 table。我尝试使用 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();
}
将显示从循环中取出。这应该可以解决问题。
如 Rosme 所述,不应在循环内调用 RenderWindow::display
。实际上,RenderWindow::display
每帧渲染内容只应调用一次...SFML 使用 double buffering,而 RenderWindow::display
是切换后台缓冲区的命令。让我们花点时间讨论一下这是如何工作的:
当您在双缓冲系统中绘制内容时,您实际上绘制到两个单独的表面 ("buffers") - 在任何给定时间,一个被隐藏(绘图发生的缓冲区),一个被显示屏幕上。当前用于绘图的隐藏缓冲区称为 "back buffer"。当调用 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 字符串数组创建高分 table。我尝试使用 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();
}
将显示从循环中取出。这应该可以解决问题。
如 Rosme 所述,不应在循环内调用 RenderWindow::display
。实际上,RenderWindow::display
每帧渲染内容只应调用一次...SFML 使用 double buffering,而 RenderWindow::display
是切换后台缓冲区的命令。让我们花点时间讨论一下这是如何工作的:
当您在双缓冲系统中绘制内容时,您实际上绘制到两个单独的表面 ("buffers") - 在任何给定时间,一个被隐藏(绘图发生的缓冲区),一个被显示屏幕上。当前用于绘图的隐藏缓冲区称为 "back buffer"。当调用 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
因此,在循环完成后,您会看到绘制的第一个、第三个和第五个项目。其他的也被绘制,但是存在于后台缓冲区中看不到它们。