【发布时间】:2023-03-31 02:22:01
【问题描述】:
我试图在两点之间划一条线,为此我使用sf::VertexArray shape(sf::Quads, 4);。
这是我的整个draw 函数:
void Stick::draw(sf::RenderTarget& target, sf::RenderStates states) const {
sf::VertexArray shape(sf::Quads, 4);
sf::Vector2f p1Pos = this->p1->getPosition();
sf::Vector2f p2Pos = this->p2->getPosition();
shape[0].position = sf::Vector2f(p1Pos.x + 10.f, p1Pos.y + 10.f);
shape[1].position = sf::Vector2f(p1Pos.x - 10.f, p1Pos.y - 10.f);
shape[2].position = sf::Vector2f(p2Pos.x - 10.f, p2Pos.y - 10.f);
shape[3].position = sf::Vector2f(p2Pos.x + 10.f, p2Pos.y + 10.f);
shape[0].color = sf::Color::Green;
shape[1].color = sf::Color::Green;
shape[2].color = sf::Color::Green;
shape[3].color = sf::Color::Green;
target.draw(shape, states);
}
p1Pos 和p2Pos 是点的中心坐标。
这让我明白了一条显然不适用于移动物体的线,因为矩形的角点是固定的,这里有一些例子:(在这个例子中,红点没有移动,而白点在移动)
我想实现一个解决方案,使“Stick”(矩形)无论两个点的位置如何都可以工作,稍后我将为棒添加某种 onClick 事件,以便我可以删除通过单击它们,因此解决方案也需要与之兼容...谢谢!
【问题讨论】:
-
所以基本上你想继续重新计算线端的角度,应该是 1)沿点各自的直径,2)垂直于线本身?
-
@AdamSmooch 呃,我想是吗?基本上矩形应该“旋转”(它实际上不会旋转,我只是用不同的点绘制它),它应该总是由四个 90 度角组成