【问题标题】:Changing the world origin in C++ SFML在 C++ SFML 中改变世界原点
【发布时间】:2020-06-28 11:26:25
【问题描述】:

我最近接触了 SFML,为了让自己更舒服(并且玩得开心),我开始翻译 Daniel Shiffman 在他的 Youtube 频道 The Coding Train 上完成的一些 Coding Challenges。在尝试在 SFML 中转换星场效果时,我开始在 SFML 中寻找合适的函数,它将世界原点从屏幕的左上角更改为中心。我发现最接近这个的是 setOrigin 函数,但它只适用于精灵而不是整个窗口/屏幕。如果你不理解我对这个函数的描述,它相当于 Processing 中的 translate(x, y) 函数。任何帮助将不胜感激。

【问题讨论】:

  • SFML 使用sf::View 来控制在屏幕上显示condate system 的哪个部分。

标签: c++ sfml


【解决方案1】:

你需要使用sf::View https://www.sfml-dev.org/tutorials/2.5/graphics-view.php

这是一个小的实现示例:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(300, 300), "");
    sf::Vector2u size = window.getSize();
    sf::View view(sf::Vector2f(0, 0), sf::Vector2f(size.x, size.y));
    window.setView(view);

    sf::CircleShape cir(10);
    cir.setOrigin(10, 10);

    while(window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
            if (event.type == sf::Event::Closed)
                window.close();
    
        window.clear();
        window.draw(cir);
        window.display();
    }
    return 0;
}

【讨论】:

  • 画完圆后,将原点设置为10、10,这是为什么呢?
  • @Laith71 圆被放置在点(0, 0),但它仍然不在窗口的中心,因为圆的原点仍然是左上点
  • 哦,好的。那么这是否意味着我必须更改我制作的每个形状/精灵的原点?谢谢。
  • 在你的任务中(星场效应),每个元素的来源都没有原因。
  • 那么与其改变每个元素的原点,不如使用setCenter()函数到窗口中间?
猜你喜欢
  • 2018-06-04
  • 2022-08-12
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2020-01-07
  • 1970-01-01
相关资源
最近更新 更多