SFML白色底色在移动时处于纹理下方

问题描述 投票:0回答:2

无论如何,我正在使用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);
}

enter image description here

我也尝试过使用Sprite函数setColor,但也会更改纹理颜色。

c++ sprite sfml
2个回答
0
投票

我以前有类似的问题。为了解决这个问题,我在显示器之前添加了一个时钟,以便可以确定显示器已经完成,然后才能再次显示它。

sf::Clock clock;
while (clock.getElapsedTime().asMilliseconds() < 100);
        clock.restart();

0
投票

也许是FPS,当我没有设置最大fps时,我遇到了类似的问题,请尝试window.setFramerateLimit(60);也许会解决它

© www.soinside.com 2019 - 2024. All rights reserved.