gpt4 book ai didi

c++ sfml array[5] for loop window.display 中的字符串,只显示第 1、3、5 行

转载 作者:太空宇宙 更新时间:2023-11-03 10:27:39 24 4
gpt4 key购买 nike

如果我不能正确解释自己,您将不得不原谅我,我正在尝试使用 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();
}

最佳答案

如 Rosme 所述,不应在循环内调用 RenderWindow::display。实际上,RenderWindow::display 只应在每帧渲染内容中调用一次...SFML 使用 double buffering , 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] for loop window.display 中的字符串,只显示第 1、3、5 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28074005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com