这是我的代码:
#include <SFML\Graphics.hpp>
sf::RenderWindow renderWindow(sf::VideoMode(300, 300), "The Problem");
int main()
{
sf::Texture tX;
tX.loadFromFile("Recursos/Fondo.png");
sf::Sprite tXt(tX);
renderWindow.draw(tXt);
while (true) // main loop
{
renderWindow.display();
}
}
tX
是一个大精灵(想想:背景),所以我想避免每一帧都重绘它。
当我尝试这个时,我会闪烁,我不知道它来自哪里。
答案 0 :(得分:0)
您的代码,简化,伪:
Initialize();
Draw();
Loop {
Display();
}
你正在做的是将场景绘制到缓冲区(顺便说一下,不先清除它),然后在循环中显示它(不重绘任何东西)。
我认为你闪烁的原因是双缓冲(v-sync)。 最终发生的是你画到一个缓冲区,但另一个缓冲区空了。当您显示活动缓冲区时,它们会被翻转(因此下次显示时,它是一个空缓冲区)。 你真的应该在循环中画画。
或者,您可以禁用多缓冲,或者尝试绘图,显示,再次绘制,然后循环(这样您可以绘制到两个缓冲区,假设只有两个缓冲区。)
两种解决方案都不优雅。
如果绘制背景确实需要优化,我担心SFML不会给你这样的粒度。您可能想要查看OpemGL Stencil魔法。