无论如何,我正在使用SFML制作一款小型游戏,我的问题是渲染精灵时,并使用float值移动。精灵具有白色背景,无论移动的哪一侧都显示1像素。
这是我的Spritesheet类:
Spritesheet::Spritesheet(std::string t) {
this->texture.loadFromFile(t);
this->sprite.setTexture(this->texture);
}
sf::Sprite Spritesheet::getSprite(int x, int y, int width, int height) {
sf::Sprite spt;
spt.setTexture(this->texture);
spt.setTextureRect(sf::IntRect(x, y, width, height));
return spt;
}
void Spritesheet::setSprite(std::string t) {
this->texture.loadFromFile(t);
this->sprite.setTexture(this->texture);
}
然后是播放器类,它是绘制精灵的类:
Player::Player(int x, int y) {
// Some other code
this->spritesheet.setSprite("./res/img/tiles.png");
this->sprite = this->spritesheet.getSprite(48, 48, 16, 16);
this->sprite.setPosition(x, y);
this->sprite.scale(4, 4);
}
// Further down
void Player::render(RenderWindow& g) {
g.draw(this->sprite);
}
我也尝试过使用Sprite函数setColor
,但也会更改纹理颜色。
我以前有类似的问题。为了解决这个问题,我在显示器之前添加了一个时钟,以便可以确定显示器已经完成,然后才能再次显示它。
sf::Clock clock;
while (clock.getElapsedTime().asMilliseconds() < 100);
clock.restart();
也许是FPS,当我没有设置最大fps时,我遇到了类似的问题,请尝试window.setFramerateLimit(60);也许会解决它