在SFML中绘制凸形图形时的奇怪行为

Strange behaviour when drawing convex shape figure in SFML

本文关键字:图形 SFML 绘制      更新时间:2023-10-16

我正在使用SFML库绘制一个凸形图形:

#include <SFML/Graphics.hpp>
using namespace sf;
int main()
{
  RenderWindow window(VideoMode(400, 400), "SFML window");
  ConvexShape convex;
  convex.setPointCount(8);
  convex.setPoint(0, sf::Vector2f(0, 0));
  convex.setPoint(1, sf::Vector2f(180, 0));
  convex.setPoint(2, sf::Vector2f(180, 90));
  convex.setPoint(3, sf::Vector2f(100, 90));
  convex.setPoint(4, sf::Vector2f(100, 180));
  convex.setPoint(5, sf::Vector2f(30, 180));
  convex.setPoint(6, sf::Vector2f(30, 90));
  convex.setPoint(7, sf::Vector2f(0, 90));
  convex.setPosition(100, 100);
  while (window.isOpen())
  {
    sf::Event event;
    while (window.pollEvent(event))
    {
      if (event.type == sf::Event::Closed)
        window.close();
    }
    window.clear();
    window.draw(convex);
    window.display();
  }
  return EXIT_SUCCESS;
}

按顺时针顺序定义的点,一切都没问题!convex1

但是当我稍微改变两个坐标时我得到了一些我意想不到的东西:

#include <SFML/Graphics.hpp>
using namespace sf;
int main()
{
  RenderWindow window(VideoMode(400, 400), "SFML window");
  ConvexShape convex;
  convex.setPointCount(8);
  convex.setPoint(0, sf::Vector2f(0, 0));
  convex.setPoint(1, sf::Vector2f(180, 0));
  convex.setPoint(2, sf::Vector2f(180, 90));
  convex.setPoint(3, sf::Vector2f(100, 90));
  convex.setPoint(4, sf::Vector2f(100, 200));   // CHANGED 180 to 200
  convex.setPoint(5, sf::Vector2f(30, 200));    // CHANGED 180 to 200
  convex.setPoint(6, sf::Vector2f(30, 90));
  convex.setPoint(7, sf::Vector2f(0, 90));
  convex.setPosition(50, 50);
  while (window.isOpen())
  {
    sf::Event event;
    while (window.pollEvent(event))
    {
      if (event.type == sf::Event::Closed)
        window.close();
    }
    window.clear();
    window.draw(convex);
    window.display();
  }
  return EXIT_SUCCESS;
}

我得到以下窗口:convex2

为什么会出现这种情况?

这些坐标与凸形状中的点相关,您应该仅使用它们来更改对象的格式。为了移动你的整个对象,你应该使用这个:

convex.move(x Position, y Position);