我希望有人可以帮助我,我正在使用SFML 2.1,当我绘制我的renderWindow它只是一直闪烁,现在我知道SFML使用了两个缓冲区所以我确定一个人根本没有被绘制我不明白为什么。
这是我的循环
while(!quit)
{
rs.Canvas.pollEvent(gameEvent);
colour += 1;
rs.Update(colour);
if(gameEvent.type == sf::Event::Closed)
quit = true;
rs.Canvas.clear( sf::Color(colour,0,0) );
rs.Canvas.draw( sprite );
rs.Canvas.display();
if(colour >= 300)
quit = true;
}
rs.Canvas有这些设置
Canvas.setVerticalSyncEnabled(true);
Canvas.setFramerateLimit(60);
有人能看出为什么我的renderWindow会闪烁吗?
答案 0 :(得分:1)
在SFML 2.0教程的“控制帧率:
”部分下永远不要同时使用setVerticalSyncEnabled和setFramerateLimit!他们会混淆并使事情变得更糟。
http://www.sfml-dev.org/tutorials/2.0/window-window.php#controlling-the-framerate
在你的帖子的评论中,你声明你在窗口上打了两次电话。这将有效地将您的窗口视为单缓冲。据我所知,这可能会造成一些屏幕撕裂,但在我看来,我没有得到明显的闪烁效果。请确保删除要么设置帧速率或使用垂直同步的呼叫,只是为了确保。
答案 1 :(得分:0)
基本上我在打电话
rs.Canvas.clear
两次。我删除了第二个电话,然后一切正常