【问题标题】:SFML white background underneath texture when moving移动时纹理下方的 SFML 白色背景
【发布时间】:2020-07-13 09:50:12
【问题描述】:

我正在使用 SFML 管理一个小游戏,无论如何,我的问题是在渲染精灵时,并使用浮点值移动。精灵有一个白色背景,无论哪一边移动都会显示 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);
}

我也尝试过使用精灵函数setColor,但这也会改变纹理颜色。

【问题讨论】:

  • 我从不使用 sfml,但这对我来说似乎不是 sprite 的问题。也许是一些缓冲问题?
  • @appleapple 我真的不知道我已经搜索了一段时间并没有找到任何东西。

标签: c++ sprite sfml


【解决方案1】:

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

【讨论】:

  • 网上有人说这是个坏主意。我之前也试过这个,当它打开时问题就在那里,游戏以大约 1000 fps 的速度运行。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2012-11-21
    • 2016-07-06
    • 2016-04-19
    • 2020-11-07
    相关资源
    最近更新 更多