Edit:实际上大多数方法sf::Transform
接受额外的参数来指定转换的中心,按照https://stackoverflow.com/users/7703024/super https://stackoverflow.com/users/7703024/super对我关于同一主题的问题的评论:如何在 sfml 中“设置变换的原点” https://stackoverflow.com/questions/65620996/how-to-set-the-origin-of-a-transform-in-sfml
我不太确定你的代码,但我可能遇到了类似的问题。
我通过在使用时将对 sfml 绘图函数的每次调用替换为对自定义函数的调用来“解决”它(以一种非常不理想的方式)sf::Transform
s.
例如:而不是做类似的事情:
window.draw(thing, my_transform);
我必须做 :
draw_transformed(thing, my_transform, window)
代码在哪里draw_transformed
看起来像这样:
void draw_transformed (sf::Shape const& thing, sf::Transform const& t, sf::RenderWindow& window) // cf note (1)
{
sf::Vector2f pos = thing.getPosition();
sf::Transform go_to_zero;
go_to_zero.translate(-pos);
sf::Transform go_back;
go_back.translate(pos);
sf::Transform conjugated_transform = go_back * t * go_to_zero ;
window.draw(thing, conjugated_transform);
}
(1)我们不能使用sf::Drawable
作为类型thing
因为在 sfml 中并非所有可绘制的东西都有getPosition
方法,所以我们必须重载该函数或做一些“复杂”的事情来超越这个例子。