C++ 无需按键,SFML精灵就会不断重复
这段代码应该让我的精灵表改变它在图像中的位置, 尽管如此,它对任何按键都不太响应,但在没有任何键盘输入的情况下,它会从一个精灵快速切换到另一个精灵 以下是导致此类错误的代码:C++ 无需按键,SFML精灵就会不断重复,c++,visual-c++,sfml,C++,Visual C++,Sfml,这段代码应该让我的精灵表改变它在图像中的位置, 尽管如此,它对任何按键都不太响应,但在没有任何键盘输入的情况下,它会从一个精灵快速切换到另一个精灵 以下是导致此类错误的代码: #include <SFML\Graphics.hpp> #include <iostream> int main() { sf::RenderWindow window; window.create(sf::VideoMode(1000, 600), "Ludus"); sf::Texture
#include <SFML\Graphics.hpp>
#include <iostream>
int main() {
sf::RenderWindow window;
window.create(sf::VideoMode(1000, 600), "Ludus");
sf::Texture mTexture;
sf::Sprite mPlayer;
enum Move { Left, Right};
sf::Vector2i source(1, Left);
if (!mTexture.loadFromFile("Image.png"))
{
std::cout << "error" << std::endl;
};
mPlayer.setTexture(mTexture);
while (window.isOpen()) {
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
source.y = Right;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
source.y = Left;
}
source.x++;
if (source.x * 97 >= 291)
source.x = 0;
mPlayer.setTextureRect(sf::IntRect(source.x * 97, source.y * 91, 97, 91));
window.draw(mPlayer);
window.display();
window.clear(sf::Color(255, 255, 255, 0));
}
return 0;
}
frameCounter
被分配了值0、switchFrame
100和frameSpeed
650。您不断更改source.x
每一帧。如果您的意思是在“If”语句中,我很确定,如果没有这个部分,它不会播放任何精灵,但只播放中间的一个。请让我强调一下LogicStuff的评论:你在每一帧都不断地更改source.x
。另外,想想(或者测量,实际上)处理一个帧需要多少时间。这就解决了它,它变得很快,我看不到发生了什么,所以我把它误认为是一个bug,但它做了它应该做的事情!你一直在改变source.x
每一帧。如果你的意思是在'If'语句中,我很确定它不会播放没有这个部分的任何精灵,但只播放中间部分。请让我强调一下LogicStuff的评论:你一直在改变source.x
每一帧。另外,想想(或者测量,实际上)处理一个帧需要多少时间。这就解决了它,它变得很快,我看不到发生了什么,所以我把它误认为是一个bug,但它做了它应该做的事情!
frameCounter += frameSpeed * clock.restart().asSeconds();
if (frameCounter >= switchFrame) {
frameCounter = 0;
source.x++;
if (source.x * 97 >= mTexture.getSize().x)
source.x = 0;
}