window 事件轮询的 SFML fps 问题
SFML fps problems with window event polling
我已经开始使用 C++ 和 SFML 2.4,到目前为止我还很喜欢它,但是我 运行 遇到了一个令人沮丧的性能问题,甚至试图在屏幕上移动一个简单的白色矩形。移动 sprite 非常紧张并且 "unplayable" 即使在使用增量时间时也是如此。这似乎是由轮询 window 事件引起的。删除后,一切都像黄油一样光滑,但无法读取事件(当然)。我正在做的事情有问题吗?或者我可以做些什么来解决这个问题?
最小示例:
#include <SFML/Graphics.hpp>
int main(){
sf::RenderWindow window(sf::VideoMode(500, 500), "Testing");
sf::Image pixelBuffer;
pixelBuffer.create(100, 100, sf::Color::White);
sf::Texture pixelTexture;
pixelTexture.loadFromImage(pixelBuffer);
sf::Sprite pixelSprite;
pixelSprite.setTexture(pixelTexture);
sf::Clock clock;
while(window.isOpen()){
//Poll for events
sf::Event event;
while(window.pollEvent(event)){
if(event.type == sf::Event::Closed){
window.close();
}
}
//Update the sprite
float delta = clock.restart().asSeconds();
pixelSprite.move(sf::Vector2f(50, 50) * delta);
//Draw the sprite
window.clear(sf::Color::Black);
window.draw(pixelSprite);
window.display();
}
}
谢谢!
有没有可能你没有连接任何游戏控制器并且 运行 这个例子在 Windows 下?
如果是这样,您很可能遇到了 SFML 代码存储库中已修复的已知错误。只需从 official repository 下载并编译最新版本(master
分支),编译并安装它,问题就会消失。
作为替代解决方法,连接任何与 DirectInput 兼容的游戏控制器(例如游戏杆或游戏手柄)。
我已经开始使用 C++ 和 SFML 2.4,到目前为止我还很喜欢它,但是我 运行 遇到了一个令人沮丧的性能问题,甚至试图在屏幕上移动一个简单的白色矩形。移动 sprite 非常紧张并且 "unplayable" 即使在使用增量时间时也是如此。这似乎是由轮询 window 事件引起的。删除后,一切都像黄油一样光滑,但无法读取事件(当然)。我正在做的事情有问题吗?或者我可以做些什么来解决这个问题?
最小示例:
#include <SFML/Graphics.hpp>
int main(){
sf::RenderWindow window(sf::VideoMode(500, 500), "Testing");
sf::Image pixelBuffer;
pixelBuffer.create(100, 100, sf::Color::White);
sf::Texture pixelTexture;
pixelTexture.loadFromImage(pixelBuffer);
sf::Sprite pixelSprite;
pixelSprite.setTexture(pixelTexture);
sf::Clock clock;
while(window.isOpen()){
//Poll for events
sf::Event event;
while(window.pollEvent(event)){
if(event.type == sf::Event::Closed){
window.close();
}
}
//Update the sprite
float delta = clock.restart().asSeconds();
pixelSprite.move(sf::Vector2f(50, 50) * delta);
//Draw the sprite
window.clear(sf::Color::Black);
window.draw(pixelSprite);
window.display();
}
}
谢谢!
有没有可能你没有连接任何游戏控制器并且 运行 这个例子在 Windows 下?
如果是这样,您很可能遇到了 SFML 代码存储库中已修复的已知错误。只需从 official repository 下载并编译最新版本(master
分支),编译并安装它,问题就会消失。
作为替代解决方法,连接任何与 DirectInput 兼容的游戏控制器(例如游戏杆或游戏手柄)。