У меня есть этот единственный код C ++ / SFML ...
#include <SFML/Graphics.hpp>
#define windowWidth 600
#define windowHeight 300
int main()
{
sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight), "SFML Views");
sf::View view(sf::FloatRect(0,0, windowWidth, windowHeight));
view.zoom(2);
window.setView(view);
sf::RectangleShape back (sf::Vector2f(windowWidth, windowHeight));
back.setFillColor(sf::Color::White);
sf::RectangleShape rect (sf::Vector2f(200, 100));
rect.setFillColor(sf::Color::Red);
rect.setPosition(windowWidth - rect.getSize().x, windowHeight - rect.getSize().y); // position in the lower right corner
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(back);
window.draw(rect);
window.display();
}
return 0;
}
... который может расположить красный прямоугольник в правом нижнем углу окна.
Однако, когда я увеличиваю изображение (как в коде), оно, очевидно, перемещается вместе со всем окном, как это изображение .
У меня есть некоторые сомнения:
- Чтобы исправить положение красного прямоугольника и поместить его в нижний правый угол глобального окна, мне в настоящее время необходимо выполнить некоторые вычисления с учетом коэффициента масштабирования, размера исходного прямоугольника и т. Д. Есть ли более простой способ позиционирования этого прямоугольник в правом нижнем углу глобального окна?
- Как предотвратить изменение размеров некоторых объектов за счет увеличения вида?
- Что мне нужно сделать, чтобы в одном окне было несколько активных видов?