IntRect SFML声明

Declaration of IntRect SFML

我正在 SFML 进行一个项目,我想使用 std::pair 在我的 sprite sheet 上设置一个矩形的位置。在我的 .hpp 我有这个属性。 sf::IntRect _size;用于设置矩形的width, height, x, y。 在我的 .cpp 文件中,我已经这样做了。

void Character::setCharacter(const std::string& texture_p, std::pair<float, float> rec, std::pair<float, float> recc)
{
    _size = {rec.first, rec.second, recc.first, recc.second};

    if (!_texture->loadFromFile(texture_p))
        throw CharacterError(ERR_TEXTURE, __FILE__, __LINE__);
    _sprite->setTexture(*_texture);
    _sprite->setTextureRect(_size);
}

但是在编译过程中出现了这个错误,不知道是什么意思

Element '1': conversion from '_Ty1' requires a narrowing conversion
Element '2': conversion from '_Ty2' requires a narrowing conversion
Element '3': conversion from '_Ty1' requires a narrowing conversion
Element '4': conversion from '_Ty2' requires a narrowing conversion

该错误意味着您正在从 float 隐式转换为 int,这会导致精度损失。

将元素从 float 显式转换为 int:

_size = {
    static_cast<int>(rec.first),
    static_cast<int>(rec.second),
    static_cast<int>(recc.first),
    static_cast<int>(recc.second)
};

或者先把recrecc改成std::pair<int, int>