SFML белый фон под текстурой при движении - PullRequest
0 голосов
/ 01 апреля 2020

Я играю в маленькую игру с использованием 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);
}

А затем класс игрока, который является классом, который dr aws спрайт:

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

Я также пытался использовать функцию спрайта setColor, но она также меняет цвет текстуры.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

возможно его FPS, у меня была похожая проблема, когда я не установил максимальный FPS, попробуйте window.setFramerateLimit (60); возможно это исправит

0 голосов
/ 01 апреля 2020

У меня раньше была проблема, похожая на эту. Чтобы исправить это, я добавил часы перед дисплеем, чтобы быть уверенным, что дисплей завершен, прежде чем я смог снова его отобразить.

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