sf :: RenderTarget::mapPixelToCoordsとmapCoordsToPixelを見てください。このメソッドを使用して、座標を「ビュー」から「ワールド」スペースに変換したり、元に戻したりすることができます。ドキュメントには、例としてニーズが具体的に記載されています。
この関数は、レンダーターゲットの指定されたピクセルに一致する2D位置を見つけます。つまり、グラフィックカードとは逆の動作を行い、レンダリングされたピクセルの初期位置を見つけます。
ビューを手動で提供することなく、をVector2i
取得してRenderTargetに基づいて変換するメソッドのオーバーロードバージョンもあります。view
何らかの理由でRenderTargetを使用できない(またはアクセスできない)場合は、手動で変換を実行できます。sf::View
スケーリングや回転を実行しない(つまり、変換のみを実行する)限り、非常に単純である必要があります。
ビューの左上隅を取得するには、中央を取り、幅と高さの半分を差し引くだけです。次に、ビューの左上隅を使用してマウスの座標を変換します。
このようなもの:
// Somewhere else...
sf::View view;
void LMButtonDown(int mX, int mY)
{
sf::Vector2f viewCenter = view.getCenter();
sf::Vector2f halfExtents = view.getSize() / 2.0f;
sf::Vector2f translation = viewCenter - halfExtents;
mX += static_cast<int>(translation.x);
mY += static_cast<int>(translation.y);
printf("[%d][%d]\n", mX / TILE_SIZE, mY / TILE_SIZE);
}