На самом деле вы сталкиваетесь с двумя различными проблемами:
Первая:
Насколько я понимаю, код должен генерировать исходное изображение (1000x1000)автоматически настраивается на 500x500.
Это не совсем так.SFML обрабатывает спрайтов с реальным размером текстуры.Если ваше изображение 1000x1000, но вы хотите представить его как 500x500, вы должны назначить текстуру спрайту, как вы это делаете:
Sprite numeros(background);
, а затем масштаб этот спрайт для размещения в окне 500x500, это:
numeros.setScale(0.5, 0.5);
С этим изменением вы должны просмотреть все изображение, но ...
Второй:
Ты балуешься с видом окна.Если мы проверим документацию SFML , мы увидим, что sf::View
ожидает:
- A
sf::FloatRect
: это координата (x, y) - в данном случаеверхний левый угол - и размер (ширина, высота)
или
- Два
sf::Vector2f
: один соответствует координатам центра а другой соответствует размеру вида.
Предполагая, что вы хотите использовать второй, вы пропускаете первый параметр, координаты центра, но это не является действительно необходимым.Если вы просто не применяете представление , изображение должно отображаться во всем окне.
Поэтому вам просто нужно удалить:
window.setView(camera);
Код, который я пробовал:
int main()
{
RenderWindow window({ 500, 500 }, "SFML Views", Style::Close);
View camera;
camera.setSize(Vector2f(window.getSize()));
Texture background;
background.loadFromFile("numeros.png");
Sprite numeros(background);
numeros.setScale(0.5, 0.5); // <-- Add this
RenderTexture texture;
texture.create(window.getSize().x, window.getSize().y);
Sprite content;
content.setTexture(texture.getTexture());
texture.draw(numeros);
texture.display();
while (window.isOpen())
{
for (Event event; window.pollEvent(event);)
if (event.type == Event::Closed)
window.close();
window.clear();
//window.setView(camera); <-- Remove this
window.draw(content);
window.display();
}
return EXIT_SUCCESS;
}
И мой результат: