C++ 转换igrnores sf::Sprite';起源

C++ 转换igrnores sf::Sprite';起源,c++,c++17,sfml,C++,C++17,Sfml,在SFML中转换一个精灵,并不认为它是新的起源 在我的例子中,sf::Sprite围绕位于左上角({0,0})的轴旋转,而不管其原点如何。较早使用.setOrigin()设置新原点无效 我确信sprite在前面得到了正确的原点位置,即矩形的中心 我的代码: 在我的每个卡片类构造函数中,我设置了精灵的原点 card_sprite.setOrigin(Card::get_default_single_card_size().x*Game::get_scale()/2,Card::get_defaul

在SFML中转换一个精灵,并不认为它是新的起源

在我的例子中,sf::Sprite围绕位于左上角({0,0})的轴旋转,而不管其原点如何。较早使用.setOrigin()设置新原点无效

我确信sprite在前面得到了正确的原点位置,即矩形的中心

我的代码:

在我的每个卡片类构造函数中,我设置了精灵的原点

card_sprite.setOrigin(Card::get_default_single_card_size().x*Game::get_scale()/2,Card::get_default_single_card_size().y*Game::get_scale()/2);
然后在我的Deck类中,它的行为类似于std::stack of Cards,我使用函数:

void Deck::push(const Card& crd)
{
    push_back(crd);
    ..//
    std::default_random_engine generator;
    std::uniform_real_distribution<float> distributor(0,360);
    top().setRotation(distributor(generator));
}

提前感谢您的帮助

编辑:实际上,
sf::Transform
中的大多数方法都接受额外的参数来指定转换的中心,如per对我的问题在同一主题上的评论所示:

我不太确定你的代码,但我可能遇到了类似的问题
在使用
sf::Transform
s时,我通过将对sfml绘图函数的每次调用替换为对自定义函数的调用来“解决”它(以一种非常不理想的方式)

而不是像这样做:

window.draw(thing, my_transform); 
我必须做:

draw_transformed(thing, my_transform, window)
其中
draw\u 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
作为
对象的类型,因为在sfml中,并非所有可绘制对象都有
getPosition
方法,因此我们必须重载函数或做一些“复杂”的事情来超越这个示例。

请向我们展示代码。
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);
  
}