在SFML for C++中居中形状/对象

3

最近,我开始在Visual Studio中使用SFML制作游戏。设置好一切并编写了一些示例代码后,我得到了这个结果:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(600, 600), "Move the Shape");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

程序会产生以下结果: 将形状移出中心 我如何将圆放在中心? 我想设置一些代码,让用户可以使用键盘的箭头键移动圆圈,因此我需要将圆圈放在中心位置。
4个回答

5
您需要使用shape.setPosition(x, y)来设置shape的位置。您知道窗口的宽度和高度(各600像素),以及圆形的半径(100像素),因此可以计算出圆形需要移动到居中位置的x和y。我将把这留给您作为练习。
您还可以考虑设置圆形的原点,以便通过其中心点定位(请参见setOrigin)。

1
我刚刚自己发现了这一点,但还是谢谢你告诉我关于setOrigin部分的内容。 - Eitan Myron

0
如果您想要将一个圆心居中,可以尝试以下代码:
circle.setPosition((window.getSize().x / 2.f) - circle.getRadius(), (window.getSize().y / 2.f) - circle.getRadius());

矩形形状怎么样? - Mahir

0

实际上,我已经回答了自己的问题。要设置一个项目的位置,请编写:

shape.setPosition(x, y);

-1
首先,您应该将圆的原点设置在中心位置: circle.setOrigin(circle.getRadius() / 2, circle.getRadius() / 2); 然后,将圆的中心移动到屏幕的中央:
circle.setPosition( window.getSize().x / 2 , window.getSize().y / 2 );

2
我认为你不想把半径除以二(你是在想直径吗?) - alexforrence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接