看看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);
}