最近、SFMLを使用して複数のスプライトを保持するクラスをプログラムしようとしたときに、軽度の問題が発生しました。
複数のスプライトを含むコンテナがあり、各スプライトは、コンテナの中心点からのスケール、回転、および位置のオフセットを持つことができます。ただし、コンテナを回転させようとすると問題が発生します。個々のスプライトを回転させるだけでは、コンテナの中心からのオフセットは考慮されません(一部のユーザーインターフェイスビットでは、これが問題になります)。少し掘り下げた後、中心から角度を取得し、回転したときに最終的に配置される位置を計算する方法を発見しました。しかし、私は彼らの回転を同じに保つ方法がわかりません。基本的にこれができるようになりたい
そして回転するとこんな感じになります
SFMLが回転と原点を処理する方法のため、各スプライトの原点をコンテナの中心に設定して回転することはできません。私は、彼らがどこに行くべきか、そして彼らがすでに持っていたものに対して彼らが持つべき方向を計算するある種の関数を持っている必要があります(したがって、スプライトの角度が0の場合、コンテナが90度回転すると、現在、角度は90度です。90度で開始した場合は、コンテナ内の残りのスプライトに対する回転を維持するために、後で180度回転する必要があります)
回転したときにコンテナに対して相対的な位置を取得するために使用しているコードは次のとおりです。
float angle = atan2(p1.y -p2.y, p1.x - p2.x);
float x = radius * cos(angle);
float y = radius * sin(angle);
icon.set_position(x + spriteX, y + spriteY);
読んでくれてありがとう。私は数学がこれほど上手だったことがないので、これを自分で理解する方法がわかりません。この問題の研究を始めるまで、私はどこにどんなコスと罪があるのかさえ知りませんでしたxxどんな助けもいただければ幸いです。