SFML视图与窗口混乱

SFML Views vs window confusion

本文关键字:混乱 窗口 视图 SFML      更新时间:2023-10-16

我有这个单个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;
}

...可能将红色矩形放在窗户的右下角。

但是,当我将视图放大(如代码中(时,它显然像此图像一样与整个窗口一起移动。我有一些疑问:

  1. 要纠正红色矩形的定位并将其放置在全局窗口的右下角,我目前必须考虑Zoom因子,原始矩形大小等进行一些计算。矩形在全局窗口的右下角?
  2. 如何防止某些对象通过视图的变焦调整大小?
  3. 在同一窗口中有多个活动视图我该怎么办?

是否有任何更轻松的方法将该矩形放在全局窗口的低右角?

来自SFML 2D摄像机教程:"要使用视图绘制某些内容,您必须在调用绘制目标的setView函数之后绘制它"

">

因此,绘图零件应为

window.clear();
window.setView(view);
window.draw(back);
window.setView(window.getDefaultView()); //don't zoom red rect
window.draw(rect);
window.display();

在同一窗口中有多个活动视图我该怎么办?

只需调用每个活动视图的setView(),然后在该视图中绘制所有内容(如果需要的话(

window.setView(leftHalfView);
window.draw(a);
window.draw(b);
window.draw(c);
window.setView(rightHalfView);
window.draw(a);
window.draw(b);
window.draw(c);
window.setView(minimap);
window.draw(a);
window.draw(b);
window.setView(window.getDefaultView());
window.draw(x);
window.draw(y);