【问题标题】:Repeating texture to fit certain size in SFML重复纹理以适应 SFML 中的特定大小
【发布时间】:2023-03-17 02:15:01
【问题描述】:

我有一个包含纹理的文件。我将它加载到sf::Texture 并使用setTextureRect 分割成精灵。

现在假设一个精灵包含 20 像素宽的纹理的一部分。如何渲染它以适合例如宽度213 像素。我能想到的唯一方法是将其渲染到sf::RenderTexture 并用另一个精灵裁剪它。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: sfml


    【解决方案1】:

    您可以使用sf::Texture::setRepeated 来执行此操作。

    但是,您需要将较大图像的那部分复制到独立的纹理中。

    这是一个例子:

    #include <SFML/Graphics.hpp>
    
    int main(int, char const**)
    {
        sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
    
        sf::Image img;
        img.create(20, 20);
        for (auto i = 0; i < 20; ++i) {
            for (auto j = 0; j < 20; ++j) {
                img.setPixel(i, j, sf::Color(255 * i / 20, 255 * j / 20, 255 * i / 20 * j / 20));
            }
        }
    
        sf::Texture texture;
        texture.loadFromImage(img);
        texture.setRepeated(true);
    
        sf::Sprite sprite;
        sprite.setTexture(texture);
        sprite.setTextureRect({ 0, 0, 800, 600 });
    
        while (window.isOpen()) {
            sf::Event event;
            while (window.pollEvent(event)) {
                if (event.type == sf::Event::Closed) {
                    window.close();
                }
    
                if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) {
                    window.close();
                }
            }
    
            window.clear();
            window.draw(sprite);
            window.display();
        }
    
        return EXIT_SUCCESS;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-14
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多