【问题标题】:SFML Views vs window confusionSFML 视图与窗口混淆
【发布时间】:2018-04-24 20:07:34
【问题描述】:

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

...这可能会将红色矩形定位在窗口的右下角。

但是,当我放大视图(如代码中所示)时,它显然会像this image 一样随着整个窗口移动。 我有一些疑问:

  1. 为了修正红色​​矩形的位置并将其放置在全局窗口的右下角,我目前必须考虑缩放因子、原始矩形大小等进行一些计算。有没有更简单的方法来定位这个全局窗口右下角的矩形?
  2. 如何防止某些对象因视图的缩放而调整大小?
  3. 如何在同一个窗口中拥有多个活动视图?

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

    有没有更简单的方法可以将此矩形放置在全局窗口的右下角?

    来自SFML 2D camera tutorial:“要使用视图绘制东西,你必须在调用你正在绘制的目标的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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2016-07-18
      • 1970-01-01
      相关资源
      最近更新 更多