【发布时间】:2023-03-17 02:15:01
【问题描述】:
我有一个包含纹理的文件。我将它加载到sf::Texture 并使用setTextureRect 分割成精灵。
现在假设一个精灵包含 20 像素宽的纹理的一部分。如何渲染它以适合例如宽度213 像素。我能想到的唯一方法是将其渲染到sf::RenderTexture 并用另一个精灵裁剪它。
有没有更好的方法来做到这一点?
【问题讨论】:
标签: sfml
我有一个包含纹理的文件。我将它加载到sf::Texture 并使用setTextureRect 分割成精灵。
现在假设一个精灵包含 20 像素宽的纹理的一部分。如何渲染它以适合例如宽度213 像素。我能想到的唯一方法是将其渲染到sf::RenderTexture 并用另一个精灵裁剪它。
有没有更好的方法来做到这一点?
【问题讨论】:
标签: sfml
您可以使用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;
}
【讨论】: